2004년 3월 10일 수요일

stack memory size

main() 함수나 거기서 호출하는 function, class에서 stack memory를 너무 많이 쓰면
Segmentation fault가 날 수 있다.

$ ulimit -s 명령으로 stack memory size를 확인한다.
$ ulimit -a
core file size        (blocks, -c) unlimited
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited

stack size가 8K 이므로 다음 프로그램은 에러가 난다.
(segmentation fault이므로 8K가 넘어도 안 날 수도 있으나 항상 잠재적인 문제를 지니고 있다.)

#include <stdio.h>

int main(int argc, char* argv[])
{
    char a[1024 * 8092 + 1024 * 256];
    a[0] = 'a';

    printf("%d\n", argc);

    return 0;
}

1. 이 프로그램에서 char를 declare할 때 에러가 나지 않고 a[0] = 'a' 부분이나 argc를 print할 때 에러가 나는 데. 이 사실을 모르고 있으면 에러를 찾기 참 힘들다.

2. 어떤 경우에는 gdb로 찍어보면 함수이 호출된 직후인 '{' 가 있는 줄에서 죽는 경우도 있다.

해결책 : malloc, new 등을 쓴다.

댓글 없음:

댓글 쓰기