Stack은 위에서 아래로
Heap은 아래에서 위로 쌓아올라가고
Heap을 할당하고 해제하면서 빈공간이 생기기도 한다.
Heap은 새로운 메모리 공간을 받기위해 중간에 어느파트가 비어있는지, 어느정도의 공간이 필요한지
프로그램 실행 과정에 알 수 있다.
Multi thread 프로그래밍시에는 여러 Thread가 Heap메모리에 접근권한을 갖게되는데
그때 문제가 없기 위해 더 복잡하게 allocation을 하므로 Stack에 비해 Heap은 allocation / dealloc이 느려 Stack이 유리하다.
Stack의 경우 컴파일과정에서 모든 것이 이루어지기에 배열같은 경우 프로그램 실행시 할당이 불가능하고 큰 크기의 경우 Stack overflow로 프로그램이 멈출 수 있다.
C++에서는 object 개수에 상관없이 총 용량이 몇 kb미만이라면 무조건 Stack에 allocation하는게 맞다.
엄청난 크기의 배열을 allocation하고 싶으면 vector를 사용하자.
이외에 Static(global) 메모리 공간이 있는데 전역변수를 저장하며 보통 Heap 아래에 있다
process가 실행됨과 동시에 이 파트를 가지고 있는다.