Başka bir soruya cevap vermenin bir parçası olarak, gcc
(-O3
) 'un çılgınlık seviyesinin temelde kullanılmayan herhangi bir değişkeni ortaya çıkardığını göstermek istedim. kodu:gcc insani optimizasyon seviyesi (-O3) yeterince deli değil mi?
#include <stdio.h>
int main (void) {
char bing[71];
int x = 7;
bing[0] = 11;
return 0;
}
ve gcc -O3
çıkış oldu:
.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
Şimdi yerel değişkenler kaldırılır ama fire biraz hala orada olduğu görülüyor.
pushl %ebp
xorl %eax, %eax
movl %esp, %ebp
popl %ebp
ret
bölüm ile değiştirilmesi mümkündür basit: tüm geliyor bana
xorl %eax, %eax
ret
kimse gcc
Bu optimizasyonu yapmaz neden bir fikri var mı? Bunun, main
için çok az tasarruf edeceğini biliyorum, ancak eğer bu normal fonksiyonlarla da yapılmışsa, yığın işaretçisini gereksiz bir döngüde gereksiz yere ayarlama etkisi kayda değer olacaktır.
takımını oluşturmak için kullanılan komut
oldu:gcc -O3 -std=c99 -S qq.c
gcc'i çağırmak için komutun tamamını ekleyebilir misiniz? –