2011-08-08 4 views
4

스택 프레임에서 함수의 리턴 값을 푸시하는 것이 합리적인지 궁금합니다.스택 프레임에서 리턴 값을 푸시

반환 값은 대부분 레지스터에 저장된다는 것을 알고 있지만 (gcc의 경우 eax) 성능을 위해서입니까?

감사합니다.

답변

9

의미가 있지만 수동 삽입해야합니다 (간단한 푸시가 아닌). 함수를 호출하기 전에 호출자가 '공간'을 할당해야합니다 (함수를 호출하기 전에 sp를 줄여야합니다). 함수에서 반환 할 때 반환 주소는 스택의 맨 위에 있어야하므로 반환 값이 있어야합니다. 반송 주소 아래에 [스택에 인수를 전달하는 것과 같은 원리]

+0

명확한 설명을 가져 주셔서 감사합니다. 이 경우 호출자는 반환 값을 일부 변수에 지정하고 (필요한 경우) 팝업 한 다음 매개 변수를 팝업해야합니다. – ms123

+1

예. 함수를 호출하기 전에 호출자는 반환 값에 충분한 공간을 제공하기 위해 sp를 줄입니다. 함수가 끝나면 호출자가 반환 값을 스택 [반환 주소가 이미 튀어 올랐습니다.]에 반환 할 것이므로 스택 어딘가에 할당하고 스택에서 팝해야합니다. – amit