묵시적 가용리스트
뭐가 묵시적인가..
- 가용리스트가 따로 표시가 저장되어있지 않고, 모든 청크를 확인하며 사이즈가 맞는 가용리스트를 찾으면 메모리를 할당해주는 방식
구현 방식
힙을 초기화
- 초기화 된 힙에는 프롤로그, 에필로그가 있어야 한다.
- 프롤로그는 헤더와 푸터를 가지고 있다.
- 에필로그는 헤더를 가지고 있다..
메모리 블록의 구조
- 힙영역에서 가지고 온 메모리 공간을 청크라고 부른다.
- 각 청크는 헤더와 푸터를 가지고 있다.
- 헤더와 푸터에는 사이즈와 할당 여부를 저장해준다
메모리 할당
- 힙의 모든 청크를 확인하여, 할당하고자 하는 크기보다 크거나 같은 가용블럭을 찾으면 할당해준다.
- 없으면 힙 영역에서 메모리를 더 가지고 와서, 거기다 할당을 해준다.
메모리 해제
- 해당 청크의 헤더와 푸터에 할당정보를 갱신해준다.
- 해제된 청크의 앞뒤를 확인하여, 가용블럭끼리 연결시킨다.
- 경계 태그를 이용하여 가용리스트간의 연결을 상수시간 안에 해낼 수 있다.
깃헙 코드 참조하기..
https://github.com/stkang9409/mallocLab