考虑下面的代码,我将把这些代码放入一个名为Epb.cc的文件中。
void f() {
asm("nop");
} 现在,我在各种优化级别下编译它。
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的输出。
$ 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++ 在所有优化级别上不为该特定函数添加三个额外的指令?
发布于 2016-08-31 02:19:55
正如@MichaelPetch在评论中指出的那样,一个将影响该函数(而且还会影响其他函数)的解决方案是使用-fomit-frame-pointer编译器选项,这将导致g++在发现机会时省略序言,而不管优化级别如何。
https://stackoverflow.com/questions/39239618
复制相似问题