gcc 의 옵션중 fomit-frame-point 는 정확히 무엇을 하는건가요?
많은 곳에서 -O 옵션과 함께 이 옵션이 사용되는데
문서를 읽어봐도 몬소리인지 이해가 안갑니다.(영어가 시로 ㅠ.ㅠ)
--------------------------------------------------------------------------------------
`-fomit-frame-pointer'
Don't keep the frame pointer in a register for functions that
don't need one. This avoids the instructions to save, set up and
restore frame pointers; it also makes an extra register available
in many functions. *It also makes debugging impossible on some
machines.*
On some machines, such as the Vax, this flag has no effect, because
the standard calling sequence automatically handles the frame
pointer and nothing is saved by pretending it doesn't exist. The
machine-description macro `FRAME_POINTER_REQUIRED' controls
whether a target machine supports this flag. *Note Registers::.
-------------------------------------------------------------------------------------
프레임 포인터가 멀 말하는지도 자세히 모르겠네요...
x86에서 C 프로그램을 짜서 컴파일을 해보면 함수 입구에는[co
x86에서 C 프로그램을 짜서 컴파일을 해보면 함수 입구에는
가 있고출구에는
popl %ebp
가 있는 걸 볼 수 있습니다. 이 %ebp 레지스터를 프레임 포인터라고 하고, %ebp 레지스터로 나누어진 스택 공간의 경계를 스택 프레임이라고 합니다. 스택 프레임을 쓰면 항상 4(%ebp)는 리턴 주소, 8(%ebp)는 항상 첫번째 인수, 12(%ebp)는 두번째 인수, ...가 되고 (%ebp)는 원래 %ebp 레지스터의 값, -4(%ebp)는 첫번째 지역 변수, -8(%ebp)은 두번째 지역 변수, ...가 되지요.스택 프레임을 쓰면 디버그하기가 아주 편리합니다. 지역변수와 인수의 위치가 항상 고정되어 있으니까요. 반면 %ebp 레지스터를 다른 용도로 쓰지 못하게 되므로 최적화 여지가 그만큼 줄어든다는 단점이 있지요.
Re: gcc 의 옵션중 fomit-frame-point 는 정확히 무엇을 하는건
함수 호출을 하면, 함수에 전달되는 인자 및 함수 안에서 사용되는
지역 변수들을 위해 stack frame 이라는 것을 형성하게 되는데,
이때 스택의 특정 위치를 가리키게 되는 포인터가 frame pointer 입니다.
이런 작업을 하지 않아도 될 함수들은 frame pointer 를 제거해서
거기에 필요한 연산을 줄이는 옵션입니다.
참조 링크:
http://www.eventhelix.com/RealtimeMantra/Basics/CToAssemblyTranslation.htm
http://chortle.ccsu.edu/AssemblyTutorial/Chapter-28/ass28_4.html
Orion Project : http://orionids.org
Re: gcc 의 옵션중 fomit-frame-point 는 정확히 무엇을 하는건?
늦었군요. -_-
이런 질문에 답이 안달렸길래, 답을 다실것으로 예상되는 분들이
출타중이시라 생각했건만. :)
Orion Project : http://orionids.org
Re: gcc 의 옵션중 fomit-frame-point 는 정확히 무엇을 하는건?
빨리 달려고 허둥지둥하다 엄청 많이 틀려서 수정을 여러 차례 했습니다. 8)
그렇군요... 많이 배웠습니다..
그렇군요... 많이 배웠습니다..
=================================
:: how about a cup of tea ? ::
=================================
gentoo에도 쓰더군요.
음, 오늘 좋은 거 배웠네요.
gentoo에서 빌드할때 항상 붙는 옵션이라서, 궁금했었는데..
귀차니즘 때문에 그려려니하고 있다가, 오늘에서야 알게 되네요. :)
It's better to burn out than to fade away. -- Kurt Cobain.
감사합니다...
감사합니다...
-- 아쉬운 하루 되세요 --
댓글 달기