Dynamic Memory Allocation

- dynamic memory allocator는 process의 virtual memory에서 heap을 관리함
- allocator는 heap을 다양한 사이즈의 블록의 집합으로 관리를 함
- 각각의 block은 연속적인 virtual memory의 덩어리로, allocated or free 상태가 됨
- allocator는 두가지 기본적인 스타일이 있고, 둘다 application이 명시적으로 block을 할당하는 것을 필요로 함
- Explicit allocators : application이 allocate, free둘다 명시적으로 해 주어야 함
- C : malloc, free
- C++ : new, delete
- Implicit allocators(garbage collectors) : application에서 allocate를 하지만, allocator가 allocated block이 쓰이는지 안쓰이는지를 탐지하는 것을 필요로 함. 안쓰인다면 해당 block을 free하게 됨
- Java, Lisp, ML
- Why Dynamic Memory Allocation ?
- 프로그램이 특정 자료 구조의 사이즈를 프로그램을 실행시키기 전까지는 알 수 없기 때문임
Fragmentation
- 사용되지 않은 메모리가 allocate request를 만족시킬 수 없을 때를 가리키는 현상임
- 사용되지 않은 메모리보다 allocate request의 크기가 더 크면 그 사용되지 않은 메모리를 이용할 수 없기 때문에