GccOptionOmitFramePointer입니다. == -fomit-frame-pointer == [http://foldoc.doc.ic.ac.uk/ The Free Online Dictionary of Computing]에 따르면, frame pointer의 정의는 다음과 같습니다: A pointer to the current activation record in an implementation of a block structured language. '-fomit-frame-pointer' 옵션을 쓰면 frame pointer가 필요없는 함수들을 컴파일할 때, frame pointer를 생략합니다. 따라서 frame-pointer를 저장하고, 다시 불러오는 부분에 해당하는 기계어를 만들지 않기 때문에 약간의 성능 향상을 기대할 수 있습니다. {{{#!vim c int global_int; void bar(int a, int b) { global_int = a + b; } }}} 위 소스를 제가 가진 시스템에서 gcc로 컴파일하면 다음과 같은 어셈블러를 만들어 줍니다: {{{#!vim asm ; **** void ; **** bar(int a, int b) ; **** { pushl %ebp movl %esp, %ebp ; **** global_int = a + b movl 12(%ebp). %eax addl 8(%ebp), %eax movl %eax, global_int ; **** } popl %ebp ret }}} 아래 소스는 똑같은 C 소스를 -fomit-frame-pointer 옵션을 써서 어셈블한 것입니다 (위의 어셈블 리스트와 비교해보시기 바랍니다): {{{#!vim asm ; **** void ; **** bar(int a, int b) ; **** { ; **** global_int = a + b movl 8(%esp). %eax addl 4(%esp), %eax movl %eax, global_int ; **** } ret }}} 즉, 첫 어셈블 리스트에서, 함수 첫 부분에서 pushl, movl 부분과 마지막 ret 위의 popl이 빠졌습니다. 또한 함수의 인자를 전달하는 부분에서 EBP 대신에 ESP register를 쓴 것을 볼 수 있습니다. ---- TODO: 좀 더 설명을 붙일 것. -- [http://www.cinsk.org/ 신성국] ---- CategoryCompilation