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 등을 쓴다.
댓글 없음:
댓글 쓰기