sw사관학교정글

[week06] 동적 메모리 할당

D cron 2021. 12. 16. 23:36

메모리 구조

메모리의 구조는 다음과 같다.
동적 메모리 할당을 할 때 heap영역을 사용할 것인데 일단 stack 메모리와 heap 메모리의 차이를 살펴보고 왜 heap 영역을 사용하는지 이해해 보자.

stack메모리 vs heap메모리

스택 메모리

스택 메모리는 우리가 배워왔던 자료구조와 마찬가지로 프레임 단위로 쌓여간다.
  • 컴퓨터는 변수를 찾기 위해 top 위치에서 n번째 메모리공간에 엑세스를 진행한다.
  • stack의 큰 특징은 메모리가 쌓일 때는 올리기만 하면 되고, 해제시킬 때는 맨 위를 없애주면 되기 때문에 매우 간단한 data structure를 가지고 있다.

힙 메모리

heap의 영단어 뜻은 '더미'이다. 스택처럼 쌓여가는 느낌이 아니라 순서가 없이 더미로 존재한다는 뜻이다.
  • 참고로, 자료구조 heap(우선순위 큐)이랑은 상관이 없다.

결과적으로 우리가 힙 메모리를 관리하기 위해서 다음과 같은 방식을 사용한다.

  • 스택에 어느 공간에 address 정보를 가지고 있고 그 주소는 힙 메모리에 할당받은 공간을 가리키는 형태

그런데 왜 heap 메모리를 사용해야 할까 ?

Life Cycle

  • 스택 메모리를 사용하는 경우, 우리가 어떤 함수를 스택에 저장해 놓았는데, 스택이 사라지면 함수도 사라져버리게 된다.
  • 힙 메모리를 사용하는 경우, data는 살아있고 우리는 포인터만 신경 써주면 되기 때문에 Life cycle 문제를 해결할 수 있다.

 

Large Size

  • 스택 메모리를 사용하는 경우, 엄청나게 큰 메모리를 스택에 저장할 수는 없다. 왜냐하면 스택에는 한계가 존재하기 때문
  • 힙 메모리를 사용하는 경우, stack에는 가볍게 포인터만 쌓아놓고, 힙 메모리공간에 큰 메모리를 할당받아서 사용하면 된다.

 

Dynamic

  • 스택 프레임은 모든 것이 컴파일 시간에 결정된다. int가 5개 필요할지, 10개 필요할지는 컴파일 시간에 모두 정의된다. 그런데 사용자에게 입력을 받는 경우, 사용자가 어떠한 객체를 10개 만들지 100개 만들지 알 수가 없다. (컴파일 시간에 알 수 없는 정보들이 존재)
  • 이럴 때 힙을 사용하면 스택에서 포인터만 가지고 메모리공간을 할당받을 수 있다. 그 후에는 객체를 5개, 10개 만드는 것을 프로그램 실행 과정에서 결정할 수 있다!

 

동적 메모리 할당을 사용하는 가장 중요한 이유

  • 종종 프로그램을 실제 실행시키기 전에는 자료 구조의 크기를 알 수 없는 경우들이 있기 때문이다.(위의 3. Dynamic 예시처럼)

이러한 이유들로 heap 영역을 사용해서 동적 메모리 할당을 할 것이다.

그리고 그 할당을 도와주는 녀석이 동적 메모리 할당기(dynamic memory allocator) 이다.

할당기의 유형

명시적 할당기(Explicit allocators)

  • application이 명시적으로 할당된 블록을 반환해 줄 것을 요구한다. 예를 들어, C 표준 라이브러리는 malloc 패키지라는 명시적 할당기를 제공한다.
  • C 프로그램은 malloc 함수를 호출해서 블록을 할당하며, free 함수를 호출해서 블록을 반환한다.
    • 묵시적 할당기들은 언제 할당된 블록이 더 이상 프로그램에 의해 사용되지 않고 블록을 반환하는지를 할당기가 검출할 수 있을 것을 요구한다.
    • 묵시적 할당기는 가비지 컬렉터(garbage collector)라고 알려져 있으며, 자동으로 사용하지 않은 할당된 블록을 변환시켜주는 작업을 가비지 컬렉션이라고 부른다. 자바와 같은 상위수준 언어들은 할당된 블록들을 반환시키기 위해서 가비지 컬렉션을 사용한다.
  • 묵시적 할당기(Implicit allocators)

참고자료

https://www.youtube.com/watch?v=SwgDv8DG4ao&ab_channel=%EC%BD%94%EB%93%9C%EC%97%86%EB%8A%94%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

컴퓨터시스템 제3판