9.9 dynamic memory allocation

hodeethelion·2023년 4월 7일
0

CSAPP

목록 보기
6/6

동적 메모리 할당: dynamic memory allocator는 힙이라는 자료구조를 사용한다.
Heap은 위 쪽으로 올라가는 data 영역이다. 커널은 variable brk이라는 것을 heap 위에 둔다.

  • Heap은 Block들로 구성되어 있다.
  • 각 block은 할당되어있거나 Free 상태이다.

할당되어있는 블록들은 꼭 해제를 시켜줘야한다. (application 혹은 memory allocator가 해준다)

할당은 두 가지 basic한 방식으로 이루어져 있다.

  1. Explicit allocator(명시적 할당)의 예시중 하나는 말록 패키지이다.
    malloc이라는 function을 통해서 블록을 할당한다.

  1. Implicit allocator(묵시적 할당)은 반대로 allocator가 detect한 다음에 더이상 프로그램에서 안쓰면 free해준다. 이것은 garbage collector로 알려져 있기도 하다.

이 부분의 이제 전반부에서는 explicit allocator에 대해서 말할 것이다.
section 9.10에서 부터 implicit allocator에 대해서 말할 것이다.

9.9.1 malloc & free

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을 내어준다.

profile
가슴을 따라가자

0개의 댓글

관련 채용 정보