【发布时间】:2011-02-23 02:01:47
【问题描述】:
作为回答另一个问题的一部分,我想表明gcc (-O3) 的疯狂优化水平基本上会去除 main.xml 中未使用的所有变量。代码是:
#include <stdio.h>
int main (void) {
char bing[71];
int x = 7;
bing[0] = 11;
return 0;
}
gcc -O3 的输出是:
.file "qq.c"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
pushl %ebp
xorl %eax, %eax
movl %esp, %ebp
popl %ebp
ret
.size main, .-main
.ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
.section .note.GNU-stack,"",@progbits
现在我可以看到它已删除局部变量,但其中仍有相当多的浪费。在我看来,整个:
pushl %ebp
xorl %eax, %eax
movl %esp, %ebp
popl %ebp
ret
部分可以替换为更简单的:
xorl %eax, %eax
ret
有人知道为什么gcc 不执行此优化吗?我知道这对于main 本身来说会节省很少的钱,但是,如果这也是使用普通函数完成的,那么在大规模循环中不必要地调整堆栈指针的效果会相当大。
用于生成程序集的命令是:
gcc -O3 -std=c99 -S qq.c
【问题讨论】:
-
能否包含调用 gcc 的完整命令?
标签: optimization gcc stack-frame