더북(TheBook)


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;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.