Share to: share facebook share twitter share wa share telegram print page

 

스택 오버플로

소프트웨어에서 스택 오버플로(영어: 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

외부 링크

Kembali kehalaman sebelumnya


Index: pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve 
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9