또 다른 질문에 답하기 위해 gcc
(-O3
)의 최적화 수준이 기본적으로 주에서 사용되지 않은 변수를 제거한다는 것을 보여 드리고자합니다. 코드는했다 :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를 호출하는 전체 명령을 포함 할 수 있습니까? –