동적 메모리 할당
<aside>
💡 이번 절에서는 워드가 4바이트 객체, 더블 워드가 8바이트 객체
</aside>
동적 메모리 할당기는 힙 heap이라고 하는 프로세스의 가상메모리 영역을 관리함
-
저수준의 mmap, munmap 함수를 사용해 가상메모리 영역을 생성하거나 삭제할 수 있지만, 이것보다 동적 메모리 할당기를 사용하는 게 조금 더 편리하고 호환성이 좋다고 볼 수 있음
-
-
힙이란?
- 초기화되지 않은 데이터 영역 직후에 시작해서 위쪽으로 (즉, 높은 주소 방향으로) 커지는 무요구 메모리 영역이라고 가정할 수 있음
- 힙의 꼭대기를 가리키는 변수는 brk이며, 커널은 각각의 프로세스에 대해 이를 사용함

-
할당기는 힙을 다양한 크기의 블록들의 집합으로 관리함
- 각 블록은 할당되었거나(allocated), 가용 즉, 사용 가능한(free) 가상 메모리의 연속적인 묶음 (할당된 블록은 appplication이 사용할 때 쓰라고 명시적으로 보존됨)
- 가용 블록은 명시적으로 application이 할당할 때까지 가용된 상태
- 할당된 블록은 application에 의해 명시적으로 혹은 메모리 할당기에 의해 묵시적으로 반환될 때까지 할당된 채로 남아 있음 —> 여기에서 유형이 달라짐
✌🏻 동적 메모리 할당기는 두 가지 기본 유형이 있음
- 두 유형 모두 명시적으로 블록을 할당하길 요구하지만, 이를 반환하는 방식의 차이가 있음
(1) 명시적 할당기 (explicit allocator)
- application이 할당된 블록을 명시적으로 반환해주길 요구
- (EX) C 표준 라이브러리의 malloc, free 함수를 직접 호출
(2) 묵시적 할당기 (implicit allocator)
- 할당기가 언제 할당된 블록이 더 이상 프로그램에 의해 사용되지 않고 블록을 반환하는지를 검출하도록 요구
- garbage collector 이라고 알려져 있음 (garbage collection : 자동으로 사용되지 않은, 할당된 블록을 반환시켜주는 작업)
- (EX) List, ML, JAVA 등의 언어
9.1 malloc과 free 함수