스택 오버플로

소프트웨어에서 스택 오버플로()는 스택 포인터가 스택의 경계를 넘어설 때 일어난다. 호출 스택은 제한된 양의 주소 공간을 이루며 대개 프로그램 시작 시 결정된다.

프로그램이 호출 스택에서 이용 가능한 공간 이상을 사용하려고 시도할 때 또는 지정된 시스템 메모리 사이즈보다 과다한 스택 메모리를 사용할 때 스택 오버플로(overflow)가 발생하며 이 경우 일반적으로 데이터 유실 등 '에러 발생'이 수반된다.

 무한 반복 

스택 오버플로의 가장 흔한 원인은 무한 루프에 빠진 재귀 호출이다. 테일 콜 최적화 기능이 있는 스킴과 같은 언어들은 스택 오버플로 없이 특정한 정렬인 테일 반복으로 무한 반복을 일으키게 한다. 이는 테일 콜이 추가적인 스택 공간을 차지하지 않기 때문에 가능하다.

C의 무한 루프의 예는 다음과 같다.
int foo() {
     return foo();
}
foo 함수가 발생되면 자신을 호출하여 스택 오버플로가 일어날 때까지 매번 스택에 추가 공간을 사용하며 결국 세그멘테이션 오류가 발생한다.What is the difference between a segmentation fault and a stack overflow? at StackOverflow

 같이 보기 
 버퍼 오버플로
 콜 스택
 힙 오버플로
 스택 버퍼 오버플로

 참조 

 외부 링크 
  The reasons why 64-bit programs require more stack memory

분류:소프트웨어 버그
분류:컴퓨터 오류