따..딱히 공부하려고 포스팅하는 건 아니니까..!

힙(Heap)과 스택(Stack)의 최대 할당 크기 본문

시스템|서버|네트워크

힙(Heap)과 스택(Stack)의 최대 할당 크기

보즈리 2016. 6. 15. 03:23

프로그래밍을 하면서 스택 영역, 힙 영역이라는 말을 많이 들어봤을 것이다.

스택이나 힙은 한 프로세스 내에 존재하는 메모리 영역인데, 이 스택과 힙 메모리 공간을 얼마나 할당할 수 있는지 알아보고자 한다.




<프로세스 내 메모리 영역>


위 그림은 번지에 따른 메모리 구조이다. 즉, 위에 있을 수록 주소가 높고(High Address) 밑에 있을 수록 주소가 낮다(Low Address).

크게 코드 영역, 데이터 영역으로 나뉘고, 작게는 데이터 영역 내에서 힙, 스택으로 나뉜다.


하지만 처음부터 모든 메모리 공간을 사용하지는 않는다. 보통 힙과 스택 사이가 비어있는데, 이는 미사용 공간으로 처음부터 힙과 스택이 할당되어 있는게 아니라는 의미이다. 이들은 메모리 공간이 필요할 때 할당이 된다. 스택이라면 함수가 호출될 때, 힙이라면 동적으로 할당했을 때 할당된다.


그렇다면 힙과 스택은 최대 얼마까지 할당할 수 있을까?

우리가 주로 사용하는 힙과 스택은 기본적으로 사용자 지정에 의해 최대 크기를 정할 수 있다.

하드웨어는 유한하다. 그러므로 힙과 스택을 최대로 할당할 수 있는 크기도 유한하다.

결론만 말하자면(OS에 따라 다르겠지만 윈도우 기준에서) 한 프로세스 내에서 스택과 힙은 윈도우에서 설정한 램 메모리만큼 최대로 할당할 수 있다.



<현재 램은 약 2기가 정도 남았다>



이를 확인해보기 위해 비주얼 스튜디오로 시험해봤다.


보통 비주얼 스튜디오에서는 디폴트 값으로 스택의 최대크기를 1MB로 지정한다.




이때, 정말 1MB정도 밖에 할당이 되지 않는지 한번 확인해봤다.


char 형은 1byte이다. char[1000000]은 1000000byte 즉, 약 1MB정도 된다.

그렇다면 1MB 이상을 할당한다면 어떻게 될까?



보다시피 char를 천만개 선언했더니 윈도우에서 프로그램을 강제 종료 시킨다.



약 200MB를 설정해보고 할당했더니 잘된다.


현재 PC의 램 크기는 2GB정도 남아있었다.

그렇다면 스택의 최대 크기를 2GB로 설정하고 그 이상을 할당하면 어떻게 될까?



메모리 공간이 부족하여 명령을 처리할 수 없다고 한다. (char를 2GB 이하로 선언해도 같은 메시지를 볼 수 있다.)


즉, 스택은 남은 램의 크기 만큼 할당할 수 있다.

힙 또한 마찬가지로 램의 크기만큼 할당할 수 있다.


(Tip. 만약 이 램을 다 사용한다면 가상메모리를 사용할 것이다.)

1 Comments
댓글쓰기 폼