Organization
할당이 해제되어 있는 블록들은 연결리스트 형태로 관리하는 방식이다.
free block
내에 pred
와 succ
포인터를 포함하는 이중연결리스트로 구현할 수 있다. 이러한 구조 때문에 Explicit
방식에서는 각 free block
의 size
정보뿐만 아니라 이전과 다음 free block
에 대한 정보를 명시적으로 가지고 있다.
모든 block
을 검색하는 implicit
방식을 개선하여, 검색할 때 모든 블록을 검사하지 않고, 할당이 해제된 블록들만 검사하는 방식이다. (실제 성능은 implicit
에서 next-fit
방식과 유사)
free block
들은 논리적으로 1번 그림과 같이 이중연결 리스트로 관리되지만, 실제로는 free block
과 alloc block
이 함께 존재하고, free block
끼리만 pred
와 succ
포인터로 연결되어 있는 것이다.
또한 연결리스트의 마지막 블록(prologue block
)은 allocated block
임.
Allocating Blocks
연결리스트를 순회하면서 free block
의 size
를 확인한다.
block size
가 할당 size
보다 작다면 해당 블록의 next
포인터로 이동하여 다음 블록을 순회한다.
block size
가 할당하려는 size
보다 크거나 같다면 할당한다.
해당 block
을 free list
에서 제외한다.
block size
가 할당할 수 있는 사이즈 공간보다 크다면, 블록을 분할하여 할당한다. 나머지 블록은 free block
으로 변경한 후 연결리스트에 추가한다.
할당 size
가 정렬 기준 사이즈 공간보다 작다면 padding
을 통해 해당 block
을 정렬기준에 맞춘다.
메모리를 할당하고 해당 block
의 주소를 반환한다.
할당할 수 있는 공간이 없다면 (연결리스트의 끝에 도달했다면) 힙을 확장한다.
제거된 block
의 prev
와 next
를 수정하여 free list
의 앞 뒤 block을 연결한다.
Free Blocks - Insertion Policy
- free
한 block
을 어디에 둘 것인가에 따라 2가지 정책을 사용한다.
LIFO
(선입선출)
단순하고 상수시간에 처리됨. (throughout
향상)
fragmentation
이 address-ordered
policy보다 안 좋음.
📍 할당해제 과정
할당을 해제할 block
의 주소를 받는다.
해제할 block
의 앞 뒤의 block
을 확인한다.
free block
이 없다면 해당 block
만 연결리스트의 가장 앞에 추가하고 prev
와 next
를 설정한다.해제할 block
의 앞 혹은 뒤에 이미 free block
이 있다면 해당 free block
을 free list
에서 제외한다.
해제할 block
과 앞에서 제외한 free block
과 합쳐 하나의 free block
으로 만들고 연결리스트의 가장 앞에 추가한다.
Address-ordered
free list
가 항상 address
순서대로 있도록 free list
를 삽입. addr(prev)
< addr(curr)
< addr(next)
address
순서대로 배치해야 하기 때문에 검색이 필요함.fragmentation
이 LIFO
보다 좋음. (memory utilization
향상) - coalesce 확률이 더 높기 때문free list
안의 block
들을 size
별로(size-class
) 구분하는 방식이다.Free list
가 주어지면 각 block
들은 해당되는 size-class
에 배치된다.class
가 구분되어 있으므로 의 속도로 block
이 어떤 size class
에 속하는지 알 수 있다.free block
은 가장 처음에 맞는(first-fit
) size class
별로 구분하여 할당한다.first fit
방식으로 탐색하지만, size class
가 을 기준으로 구분되어 있으므로 의 속도를 갖기 때문에 implict
방식보다 크게 개선된 thorughput
을 가진다.size-class
별로 구분하여 할당하기 때문에 best-fit
방식과 유사하므로 memory utilization
에서 향상된 성능을 기대할 수 있다.📌 참고 자료
Dynamic Memory Allocation : Basic Concepts 15-213 15-213: Introduction to Computer Systems 19th Lecture, Nov. 3, 2015
Dynamic Memory Allocation : Addvanced Concepts 15-213 15-213: Introduction to Computer Systems 20th Lecture, Nov. 5, 2015
Computer Systems A Programmers Perspective (3rd) - Randal E. Bryant • David R. O’Hallaron