스택 오버플로

위키백과, 우리 모두의 백과사전.

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

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

무한 반복[편집]

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

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

int foo() {
     return foo();
}

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

같이 보기[편집]

참조[편집]

  1. Burley, James Craig (1991년 6월 1일). “Using and Porting GNU Fortran”. 2012년 10월 5일에 원본 문서에서 보존된 문서. 2016년 11월 25일에 확인함. 
  2. “An Introduction to Scheme and its Implementation”. 1997년 2월 19일. 2007년 8월 10일에 원본 문서에서 보존된 문서. 2007년 8월 14일에 확인함. 
  3. What is the difference between a segmentation fault and a stack overflow? at StackOverflow

외부 링크[편집]