Malloclab 구현 with AVL TREE

아마 9챕터가 마지막일 것 같은데 많이 왔다…

8.1 Dynamic Memory allocation

우리가 사용하는 메모리의 양은 한정되어있다. int a[20000];과 같은 경우 20000*4 byte의 메모리를 사용하게 되는데 데이터 입력 양이 적어서 30개만 사용한다면 어떨끼? 19970개의 int type 메모리가 불필요하게 할당되는 것이다. 따라서 우리가 필요한 만큼만 동적으로 할당하는 Dynamic memory allocation이 필요하다.

Dynamic memory allocation을 돌리기 위해서는 Dynamic memory allocators(malloc이나 free 같은 것)을 사용하게 된다. 이 Dynamic memory allocator들은 heap이라는 Virual memory를 관리하게 된다.

마52.png

Allocator에는 두 가지가 있으며 Explict allocator과 Implict allocator이 있다. Explict allocator은 메모리를 할당하고 space를 free 시키는 것이고, implict는 메모리를 할당하나 space를 free 시키지 않는 것이다. 그럼 기본적인 explict malloc 부터 보자.

8.2 Malloc package

malloc은 데이터를 할당하는 것이다. 예로 들면 N개 데이터의 int 배열을 할당하고 싶으면 void *malloc(sizeofint() * N) 이렇게 말이다. 해제 시킬려면 void free를 이용하여 메모리 할당을 해제해야 한다. malloc의 경우 오류가 뜨면 NULL을 return하고 errno를 set한다. 아래는 예제 코드다.

마53.png

Allocation은 보통 순서대로 할당하지만 free로 중간에 공간이 비면 그곳으로 잘 할당시킨다.

마54.png