作爲回答另一個問題的一部分,我想表明,gcc
(-O3
)的瘋狂優化級別基本上會去掉任何未在main中使用的變量。該代碼是:gcc瘋狂的優化級別(-O3)不夠瘋狂嗎?
#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的完整命令? – 2011-02-23 02:09:04