동적 메모리 할당: dynamic memory allocator는 힙이라는 자료구조를 사용한다.
Heap은 위 쪽으로 올라가는 data 영역이다. 커널은 variable brk
이라는 것을 heap 위에 둔다.
할당되어있는 블록들은 꼭 해제를 시켜줘야한다. (application 혹은 memory allocator가 해준다)
할당은 두 가지 basic한 방식으로 이루어져 있다.
이 부분의 이제 전반부에서는 explicit allocator에 대해서 말할 것이다.
section 9.10에서 부터 implicit allocator에 대해서 말할 것이다.
malloc function은 할당하는 함수 예로 들어 다음과 같이 쓴다.
#include <stdlib.h>
void *malloc(size_t size);
얘는 무슨 짓을 하냐면 pointer를 내어준다 가장 작은 사이즈의 바이트를 내어주는 것이다.
32bit mode에서는 block이 항상 8의 배수 64bit 일때는 16의 배수를 내어준다
만약 가능한 메모리보다 더 크다면 에러를 준다.
Malloc은 initialize 하지는 않는다.
만약에 initialized 된것을 원한다면 calloc을 준다. malloc function에다가 0으로 다 할당해주는 것이다.
malloc은 sbrk function을 이용해서 allocate 할 수도 deallocate 할 수도 있다.
sbrk function은 줄일 수도 늘릴 수도 있다.
만약 incr = 0 이라면 그냥 현재의 brk의 포인트를 준다.
만약 음수라면 그만큼 더 간 top of the heap을 내어준다.