【发布时间】:2015-12-02 19:13:18
【问题描述】:
我有一个简单的 C 代码:
#include <stdio.h>
void p(){
printf("jjjj");
}
int main(){
p();
}
如果我在 Mac OSX 上使用 g++ 编译它并使用 otool -tv 反汇编,我可以看到 p 和 main 函数,并且 main 调用 p。使用优化 (-O3) 我得到了这个:
(__TEXT,__text) section
__Z1pv:
0000000100000f40 pushq %rbp
0000000100000f41 movq %rsp, %rbp
0000000100000f44 leaq 0x4b(%rip), %rdi
0000000100000f4b xorl %eax, %eax
0000000100000f4d popq %rbp
0000000100000f4e jmp 0x100000f76
0000000100000f53 nopw %cs:(%rax,%rax)
_main:
0000000100000f60 pushq %rbp
0000000100000f61 movq %rsp, %rbp
0000000100000f64 leaq 0x2b(%rip), %rdi
0000000100000f6b xorl %eax, %eax
0000000100000f6d callq 0x100000f76
0000000100000f72 xorl %eax, %eax
0000000100000f74 popq %rbp
0000000100000f75 retq
似乎main 仍然调用地址0x100000f76 的东西。如何查看此位置的内容? g++ 在这里做什么?
【问题讨论】:
标签: c gcc optimization