스택오버플로우(Stack Overflow)

나무에물주기·2023년 1월 12일

CS

목록 보기
7/16

스택오버플로우(Stack Overflow)

Stack Overflow는 Stack 영역의 메모리가 지정된 범위를 넘어갈 때 발생한다.

Stack 메모리는 보통 지역 변수가 저장되는 영역이다.

함수에서 지역 변수를 선언하면 지역 변수는 Stack 메모리에 할당되고 함수를 빠져나오면 Stack 메모리에서 해제된다.

하나의 프로그램이 실행될 때 수많은 함수를 호출하고 빠져 나오게 되는데 그 때마다 함수에서 사용하는 지역 변수는 Stack 영역에 할당되고 해제되는 것을 반복하게 되며 그에 따라 사용하는 Stack 영역도 변하게 된다.

만약 한 함수에서 너무 큰 지역 변수를 선언하거나 함수를 재귀적으로 무한정 호출하게 되면 stack overflow가 발생할 수 있다.

stack overflow가 발생하면 컴파일러 옵션에서 stack 영역의 크기를 늘리거나 또는 함수에서 사용하는 지역 변수의 크기를 줄이거나 아니면 지역 변수를 전역 변수로 바꾸어 해결할 수 있다.

Visual C++과 같은 PC 컴파일러에서는 디버깅 모드에서 Stack Overflow가 발생하면 Stack Overflow 에러 메세지를 출력하지만 임베디드 시스템에서는 Stack Overflow 에러 메세지를 출력하지 않고 이상 동작하는 경우가 많기 때문에 주의해야 한다.

profile
개인 공부를 정리함니다

0개의 댓글