5.1스택 프레임 할당
본격적으로 들여다보기 전에 호출 규약(calling convention)에 대해 알아보겠습니다. 호출 규약은 함수가 호출될 때 스택에 인자를 할당하거나 해제하는 주체가 함수를 호출한 쪽(caller)인지, 호출된 함수(callee)인지 정해 놓은 것입니다. 우리가 볼 예제에서는 인자의 할당과 해제를 함수를 호출한 쪽에서 담당합니다.
TIP 호출 규약에는 스택에 인자를 할당하고 해제하는 주체가 피호출자(callee)인 stdcall과 fastcall, 주체가 호출자(caller)인 cdecl 등 여러 종류가 있습니다. 이번 예제는 cdecl 호출 규약입니다.
이제 예제 코드를 봅시다.
코드 9-2 memory/stack_frame.c
#include <stdio.h> int adder(int a, int b, int n) { int c = a * n; int d = b * n; int e = c + d; return e; } int main(void) { int a = 10; int b = 20; int n = 2; int res = adder(a, b, n); return 0; }