【编译】gcc -O2 编译flag里面做了什么

本文只从结果进行表述,详细原因请参考:记一次gcc -O2大幅度增加binary size的问题_电影旅行敲代码的博客-CSDN博客

用live555进行了一个测试,正常代码逻辑为以下

->

->

不设置-O   flag,调用堆栈为

->

->


    编译出的文件size
    $ ll live555/libBasicUsageEnvironment.so.1 
    -rwxrwxr-x 1 dljx dljx 119256 Apr 14 17:36 live555/libBasicUsageEnvironment.so.1
调用堆栈
#1  0x00007ffff30c8a69 in AlarmHandler::handleTimeout (this=0x7fffe4001230) at BasicTaskScheduler0.cpp:34
#2  0x00007ffff30caae4 in DelayQueue::handleAlarm (this=0x66f1f8) at DelayQueue.cpp:187
#3  0x00007ffff30c9a8c in BasicTaskScheduler::SingleStep (this=0x66f1f0, maxDelayTime=0) at BasicTaskScheduler.cpp:212
#4  0x00007ffff30c82c6 in BasicTaskScheduler0::doEventLoop (this=0x66f1f0, watchVariable=0x66f1d0 "") at BasicTaskScheduler0.cpp:80

设置-O2 flag,调用堆栈为

->


    编译出的文件size还变大
    $ ll live555/libBasicUsageEnvironment.so.1 
    -rwxrwxr-x 1 dljx dljx 131824 Apr 14 17:23 live555/libBasicUsageEnvironment.so.1
调用堆栈
#1  0x00007ffff30c9d8b in AlarmHandler::handleTimeout (this=0x7fffe4001230) at BasicTaskScheduler0.cpp:34
#2  0x00007ffff30ca5dd in BasicTaskScheduler::SingleStep (this=0x66f1f0, maxDelayTime=) at BasicTaskScheduler.cpp:212
#3  0x00007ffff30c96dc in BasicTaskScheduler0::doEventLoop (this=0x66f1f0, watchVariable=0x66f1d0 "") at BasicTaskScheduler0.cpp:80

代码块如下:

void BasicTaskScheduler::SingleStep(unsigned maxDelayTime) {....// Also handle any delayed event that may have come due.fDelayQueue.handleAlarm();    // call 

}

void DelayQueue::handleAlarm() {if (head()->fDeltaTimeRemaining != DELAY_ZERO) synchronize();if (head()->fDeltaTimeRemaining == DELAY_ZERO) {// This event is due to be handled:DelayQueueEntry* toRemove = head();removeEntry(toRemove); // do this first, in case handler accesses queuetoRemove->handleTimeout();  // call 

} }

 virtual void AlarmHandler::handleTimeout() {(*fProc)(fClientData);DelayQueueEntry::handleTimeout();}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部