C에서 스택을 얼마나 쓰는지 알아내기

GCC의 링커를 쓸 경우 스택의 크기는 다음과 같이 설정할 수 있다.

cc -Wl,--stack,8388608 ...

그런데 재귀호출을 구현하다 보면 스택의 크기를 얼마로 잡아야 할지 애매할 때가 있다. C에서는 재귀함수 변수의 메모리 주소를 이용해서 증가하는 스택의 크기를 확인할 수 있다.

#include <stdio.h>
#include <stdlib.h>

static void *stack_top, *stack_bottom;

static void func(int);

int main(int argc, char *argv[])
{
    stack_top = (void *)&argc;

    func(argc == 1 ? 0 : atoi(argv[1]));

    printf("Stack usage: %ld\n", stack_top - stack_bottom);
}

static void func(int n)
{
    stack_bottom = (void *)&n;
    if (n > 0)
        func(n - 1);
}

다음과 같이 실행해 보자.

$ ./stack_usage
Stack usage: 32   # 여기서 func() 함수를 한 번 호출하는데 32 바이트가 필요하다는 걸 알 수 있다.
$ ./stack_usage 100
Stack usage: 3232 # 추가적으로 100 번을 더 호출하면 최초 32 + 32 * 100 = 3232 바이트가 필요하다.

참고문헌

이 칸을 비워 두세요.