더북(TheBook)

함수 호출이 완료된 것입니다. 어셈블리 코드의 마지막 행은 스택 프레임 해제를 마무리하는 단계입니다. 이 코드에서도 메모리를 직접 삭제하는 것이 아니라, 스택 포인터를 인자가 차지했던 메모리만큼 더해서 해제합니다. 스택을 쌓을 때(할당할 때) 스택 포인터에서 일정 메모리를 빼서 낮은 주소로 옮겼으므로 반대로 스택에서 메모리를 해제할 때는 덧셈을 활용해 스택 포인터를 높은 주소로 옮기면 됩니다. 이때 호출 규약이 cdecl이어서 함수 인자의 해제를 함수를 호출한 쪽(caller)에서 담당한다는 점에 주목하기 바랍니다.

지금까지 스택 프레임이 어떻게 할당되고 해제되는지 cdecl 호출 규약을 따르는 함수를 통해 알아보았습니다. 다른 호출 규약이나 다른 언어의 함수 호출에서는 조금씩 차이가 나지만 전체적인 틀을 이해하면 얼마든지 적용할 수 있습니다. 스택 프레임을 아는 것과 모르는 것은 실제 프로그래밍을 할 때도 차이가 납니다. 함수의 작동 원리를 메모리와 연관해 정확히 알고 있으면 애초에 실수를 줄일 수 있을 뿐만 아니라 디버깅 속도도 빨라집니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.