개발자 면접 공부/운영체제,CS

Stack OverFlow란?

chogyujin 2022. 7. 26. 22:54
728x90

오늘은 Stack OverFlow를 공부해보겠습니다.


Stack OverFlow

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

 

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

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

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

 

만약 한 함수에서 너무 큰 지역 변수를 선언 또는 함수를 무한 재귀호출을 할 경우 Stack OverFlow가 발생할수 있다.

 

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

 


Stack Vs Heap

Heap은 트리 구조에서 부모와 자식 노드의 값이 대소 관계를 가지는 자료구조이다. 트리 구조에서 부모 노드의 값이 자식 노드의 값보다 항상 크거나 값으면 Max Heap(최대힙) 이라고 하며, 부모 노드의 값이 자식 노드의 값보다 항상 작거나 같으면 Min Heap(최소 힙)이라고 한다.

 

Stack

- 지역 변수에 사용

- 속도 빠름

- CPU에서 자동으로 처리

- 크기에 제한이 있음, 매우 큰 데이터는 저장이 불가

 

Heap

-malloc 또는 new 함수로 사용 해제는 free 또는 delete

-속도가 느림

-소프트웨어에서 처리함