힙 메모리

김대익·2022년 2월 18일
0
post-thumbnail

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
  • Large Size
  • Dynamic Allocation(runtime)

문제들이있다.

  1. Life Cycle문제
    Stack memory는 함수가 실행되는 동안에만 Stack에 존재하는 문제가 있다.
    이 때 Heap에 저장해두고 Stack에서는 포인터만 잘 관리하면 된다

  2. Large Size문제
    Stack의 크기는 한계가 있기 때문에 memory가 많이 필요할 경우 한정없이 쌓을 수는 없다.
    이 때 Heap에 저장해두고 Stack에서는 포인터만 잘 관리하면 된다

  3. Dynamic Allocation(runtime)
    Stack frame은 모든게 compile시간에 결정되는데 그러므로 실행과정에서 주어지는 메모리의 크기를 변경할 수 없다.
    하지만 Heap을 사용하게되면 가능하다.

0개의 댓글