에주의 : 그 이후왜 밀어 넣기 대신 movl을 사용합니까? 이 코드에
#include <stdio.h>
void a(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
int main()
{
a(1,2,3);
}
:
gcc -S a.c
명령 어셈블리 우리의 소스 코드를 보여줍니다.
이제 우리는 주 함수에서 "밀어 넣기"명령을 사용하여 인수를 스택에 밀어 넣지 않을 수 있습니다. 그 대신에 "movel"을 사용했습니다.
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $3, 8(%esp)
movl $2, 4(%esp)
movl $1, (%esp)
call a
leave
왜 그런가요? 그들 사이의 차이점은 무엇입니까?
이 '부풀림 생성 옵션'인'-maccumulate-outgoing-args'가'-Os'에 의해 자동으로 비활성화되지 않는 이유는 훨씬 더 나은 질문 일 것입니다. –
@R .. 왜 그런지 알아? – Tony
@ 토니 : 분명히, 각각의 특정 -O 옵션에 대해 많은 (~ 200) 개의 최적화 플래그를 활성화/비활성화하도록 결정할 때 상황이 균열을 통과하는 경우가 있기 때문입니다. – ninjalj