프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지가 있다.
1. 코드영역
2. 데이터 영역
3. 스택(stack) 영역
4. 힙(heap) 영역
메모리 공간 구조
메모리의 시택 영역은 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역이다.
함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
프로그램이 자동으로 사용하는 임시 메모리 영역이다.
컴파일 시에 크기가 결정된다.
스택 영역은 푸시를 해서 데이터를 저장하고, 팝을 통해서 데이터를 인출한다.
스택은 후입선출 방식에 따라 작동하므로, 늦게 들어온 데이터가 가장 먼저 나가게 된다.
스택영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
한계가 있어 초과하게 삽입할 수 없다. ( -> 유연성이 낮다)
(필요에 의해 동적으로 메모리를 할당 할 때 사용)
메모리의 힙 영역은 사용자가 직접 관리 할 수 있는 메모리 영역이다.
힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
-> malloc() 또는 new 연산자를 통해 할당되고, free() 또는 delete 연산자를 통해 해제된다.
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
런타임 시에 크기가 결정된다.
Stack영역이 클수록 Heap 영역이 작아지고, Heap영역이 클수록 Stack영역이 작아진다.
스택과 힙의 할당 속도를 비교해보면,
스택은 이미 할당되어 있는 공간을 사용하는 것이고, 힙은 사용자가 따르 할당해서 사용하는 공간이므로, 스택의 속도가 훨씬 빠르다.
(다만 스택은 공간이 매우 적기 때문에 모든 응용에서 스택을 사용할 수는 없다.)