함수 내에서만 쓰는 지역변수의 경우 사전 정의된 스택 영역만을 사용할 수 있는데, 그 안에서 함수 내의 모든 변수들의 할당과 해제가 이루어진다.
재귀함수나 상호참조 등으로 스택메모리가 터지는건 봤는데 지역변수를 너무 크게 잡아서 터질거라고는 생각도 못하고 있다가 이번에 에러를 마주하게 돼서 기록함
(생각보다 기본 스택사이즈가 매우 작더라..)
리눅스 쉘에서 ulimit -a
명령어 입력하면 stack size 확인 가능.
1024000 byte이니까
int array[506][506] 이정도 배열을 함수 내부에서 잡아버리면 seg fault 뜨면서 터져버린단소리..
gcc에 플래그로 스택사이즈 변경해서 컴파일 할 수 있다는거같은데 자세히 안찾아봄.
🔧
메모리 크게 필요한 변수 있으면 힙 메모리를 쓰는게 좋다!
stdlib의 calloc을 쓰거나, 스마트 포인터 이용