c++는 메모리 관리를 해주지 않기 때문에
메모리 누수나 메모리 단편화가 일어날 수 있다.
Stack의 경우 메모리가 쌓일 때는 올리기만 하고 메모리를 없앨 떄는 맨 위를 없애기만 하면 되는 간단한 구조
Heap은 순서없이 더미로 있는 구조이므로
Stack의 어느 공간에 포인터로 address정보를 저장하여 Heap의 어떤 공간에 접근하는 방식으로 사용한다.
int main() {
int * ip;
ip = new int;
*ip = 100;
delete ip;
return 0;
}
이 함수의 동작과정을 보면
Stack에 ip라는 포인터를 생성하고
Heap메모리에 int타입으로 공간을 생성한다.
이후 Stack의 ip포인터가 가르키는 공간(Heap)에 100이란 값을 넣고
Heap의 공간을 삭제한다.
이후 프로그램이 끝나면서 포인터도 사라진다
왜 Heap메모리를 활용해야되는가?
문제들이있다.
Life Cycle문제
Stack memory는 함수가 실행되는 동안에만 Stack에 존재하는 문제가 있다.
이 때 Heap에 저장해두고 Stack에서는 포인터만 잘 관리하면 된다
Large Size문제
Stack의 크기는 한계가 있기 때문에 memory가 많이 필요할 경우 한정없이 쌓을 수는 없다.
이 때 Heap에 저장해두고 Stack에서는 포인터만 잘 관리하면 된다
Dynamic Allocation(runtime)
Stack frame은 모든게 compile시간에 결정되는데 그러므로 실행과정에서 주어지는 메모리의 크기를 변경할 수 없다.
하지만 Heap을 사용하게되면 가능하다.