[Memory] heap memory

코르피·2023년 2월 9일
0

heap memory

힙 메모리 라는 용어는 동적할당을 위해 예약된 메모리 영역을 나타내는데
여기서 힙 이라는 것은 자료구조의 힙. 예를들어 데이터를 꺼낼 때 부모 노드와 스와핑 해서 꺼내는 등의 그런 힙이 아니라 생긴 구조 자체가 힙이라는 것이다.

작동 시나리오

  1. 앱을 실행시키면 컴퓨터의 메모리에 앱 자체가 올라갈 것이고 UIApplication등의 객체가 올라갈 것이다.

  2. 거기서 중간단계를 건너뛰고 ViewController를 가지게 되면 ARC가 적절한 크기의 메모리 블록을 찾아 포인터를 반환해준다.
    2-1. 만약 찾지 못한다면 운영체제에 메모리를 요청한다.
    2-2. 운영체제가 동적메모리 할당 로직에 의해 요청한 크기의 메모리를 가져다주고 메모리가 다 차서 없다면 메모리 스위칭도 한다.

  3. 포인터를 연결한다.

  4. ViewController에서 또다시 객체를 사용한다면 그 객체의 크기에 맞는 메모리 블록을 찾아 반환한다.

  5. 연결한다.

  6. (반복)

  7. 아무도 참조하지 않는 객체를 ARC가 자동으로 해제시킨다.

고민

힙이라는 것은 우선순위가 가장 높거나 가장 낮은 요소가 루트 노드에 저장되고 우선순위에 따라 추가되거나 제거되는 트리 기반 구조를 가진다.

그러면 차라리 힙메모리라고 하는게 아니라 트리메모리 라고 하는게 낫지 않나? 이건 그냥 트리인데? 🤔

힙 메모리에서의 힙과 자료구조의 힙이 다르기 때문이다.

메모리에서의 힙은 동적할당을 위한 메모리 할당 기술을 얘기하는 것이고
자료구조의 힙은 부모노드에서 스와핑 하면서 우선순위 큐를 구현하는데 사용되는 힙이다.

이 때까지 두 가지를 같은 컨셉으로 이해하려 하다보니 잘 이해가 되지 않았던 듯..

추가

ARC는 스택 메모리에서는 사용되지 않는다.

힙 메모리, 그러니까 동적할당된 메모리를 할당하고 해제할 때 메모리 관리를 위해 사용하는 놈이기 때문에

스택메모리에서는 사용하지 않는다.

스택메모리는 함수가 호출되었을 때 새로운 메모리 블록이 생기고 함수 인자나 지역변수, 함수가 돌아갈 위치 등 이 저장되는데 LIFO를 따라서 함수가 종료되면 알아서 사라진다.

스택메모리에서 할당 해제를 할 때는 시스템에서 자동으로 실행된다.

힙은 적당한 메모리 블록을 찾아 주는 오버헤드 작업이 있기 때문에 힙보다는 스택메모리가 빠른 것이다.

profile
행복합시다!!

0개의 댓글