는, 단순히 코드의 다음 조각을 컴파일 :최적화 후 코드는 어떻게 작동합니까? 컴파일러 최적화를 공부하는 동안
#include<stdio.h>
struct fraction {
int num ;
int denum ;
};
int main()
{
struct fraction pi;
pi.num = 22;
pi.denum = 7;
return 0;
}
이
gcc test.c -o test
나는이 분해
를 사용하여, 내가 얻을 :push %ebp
mov %esp,%ebp
sub $0x10,%esp
movl $0x16,-0x8(%ebp)
movl $0x7,-0x4(%ebp)
mov $0x0,%eax
leave
ret
을하지만 최적화를 적용하는 경우 like :
gcc test.c -o test -O3
,210
내가 분해 얻을 모든은 다음과 같습니다
push %ebp
xor %eax,%eax
mov %esp,%ebp
pop %ebp
ret
최적화없이
값 (22)와 7 명확하게 볼 분해와 나는 분명히 코드가 어떻게 작동하는지 이해할 수 있지만, 그 값이 지금 후 최적화? 코드가 지금 어떻게 작동합니까? 제발 누군가 설명해주세요.
코드는 본질적으로 아무 것도하지 않으며 컴파일러는이를 알고 있습니다. – Joe
"denum"은 "denom"을 의미합니까? "함께"란 "없이"를 의미합니까? 나는 그것이 늦었다는 것을 알고 있지만, 컴파일러 최적화에 대해 이야기 할 때 세부 사항에 대한 관심은 다소 중요합니다 ... –
프로그램이 아무 것도하지 않습니다. 최적화 프로그램이 그것을 알아내어 아무 것도하지 않는 프로그램으로 변경했습니다 (그러나 0을 반환합니다). – antlersoft