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