首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能阻止g++在跨优化级别的函数开始时推动epb和保存esp?

是否有可能阻止g++在跨优化级别的函数开始时推动epb和保存esp?
EN

Stack Overflow用户
提问于 2016-08-31 02:01:05
回答 1查看 27关注 0票数 0

考虑下面的代码,我将把这些代码放入一个名为Epb.cc的文件中。

代码语言:javascript
复制
void f() {       
    asm("nop");  
}                

现在,我在各种优化级别下编译它。

代码语言:javascript
复制
g++ -c -O0 -o Out0 Ebp.cc
g++ -c -O1 -o Out1 Ebp.cc
g++ -c -O2 -o Out2 Ebp.cc
g++ -c -O3 -o Out3 Ebp.cc

下面是每个objdump -d的输出。

代码语言:javascript
复制
$ objdump -d Out*                               

Out0:     file format elf64-x86-64              


Disassembly of section .text:                   

0000000000000000 <_Z1fv>:                       
   0:   55                      push   %rbp     
   1:   48 89 e5                mov    %rsp,%rbp
   4:   90                      nop             
   5:   5d                      pop    %rbp     
   6:   c3                      retq            

Out1:     file format elf64-x86-64              


Disassembly of section .text:                   

0000000000000000 <_Z1fv>:                       
   0:   90                      nop             
   1:   c3                      retq            

Out2:     file format elf64-x86-64              


Disassembly of section .text:                   

0000000000000000 <_Z1fv>:                       
   0:   90                      nop             
   1:   c3                      retq            

Out3:     file format elf64-x86-64              


Disassembly of section .text:                   

0000000000000000 <_Z1fv>:                       
   0:   90                      nop             
   1:   c3                      retq            

是否可以指示g++ 在所有优化级别上不为该特定函数添加三个额外的指令?

EN

回答 1

Stack Overflow用户

发布于 2016-08-31 02:19:55

正如@MichaelPetch在评论中指出的那样,一个将影响该函数(而且还会影响其他函数)的解决方案是使用-fomit-frame-pointer编译器选项,这将导致g++在发现机会时省略序言,而不管优化级别如何。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39239618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档