스택 오버플로

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

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

프로그램이 호출 스택에서 이용 가능한 공간 이상을 사용하려고 시도할 때, 스택이 오버플로(overflow)된다고 하며 이 경우 일반적으로 프로그램 충돌이 발생하게 된다.[1]

무한 반복[편집]

스택 오버플로의 가장 흔한 원인은 상당히 깊거나 무한으로 이어지는 루프이다. 테일 콜 최적화 기능이 있는 스킴과 같은 언어들은 스택 오버플로 없이 특정한 정렬인 테일 반복로서 무한 반복을 일으키게 한다. 이는 테일 콜이 추가적인 스택 공간을 차지하지 않기 때문이 가능하다.[2]

C의 무한 루프의 예는 다음과 같다.

int foo() {
     return foo();
}

foo 함수가 발생되면 자신을 호출하여 스택 오버플로가 일어날 때까지 매번 스택에 추가 공간을 사용하며 결국 세그멘테이션 오류가 발생한다.[3]

같이 보기[편집]

참조[편집]

  1. Burley, James Craig (1991년 6월 1일). Using and Porting GNU Fortran.
  2. An Introduction to Scheme and its Implementation (1997년 2월 19일).
  3. What is the difference between a segmentation fault and a stack overflow? at StackOverflow

바깥 고리[편집]