想要查看某些C代码的编译器输出(在汇编中),我在C中编写了一个简单的程序,并使用gcc生成了它的汇编文件.
代码是这样的:
#include <stdio.h>
int main()
{
int i = 0;
if ( i == 0 )
{
printf("testing\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的生成程序集在这里(只有主函数):
_main:
pushl %ebpz
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call __alloca
call ___main
movl $0, -4(%ebp)
cmpl $0, -4(%ebp)
jne L2
movl $LC0, (%esp)
call _printf
L2:
movl $0, %eax
leave
ret …Run Code Online (Sandbox Code Playgroud) 大家,我正在运行 gprof 来检查两个不同优化级别(-g -pg 与 -O3 -pg)下的执行时间百分比。
所以我得到的结果是,一个函数在 O3 中占用了 68% 的 ex-time,但在 -g 版本中只占用了 9%。
我不知道如何找出其背后的原因。我正在考虑在编译之前比较两个版本文件,但我不确定 cmd 是否这样做。
有没有其他方法可以找出这个执行时间差异的原因。
我确信有办法。我是 C 语言的新手,我对此的研究毫无结果。有没有可以将 .o 文件转换为 .c 的命令?
可能重复:
使用GCC生成可读组件?
例如,当我尝试:
gcc -c myprogram
它会给我一个目标文件,它是二进制形式.我想得到的只是一个汇编文件(在由汇编程序处理以生成目标文件之前).有没有办法在gcc中做到这一点?