쉬운 경우: 관리하고 있는 공간이 고정 크기의 단위로 나뉘어져 있는 경우, 관리하고 있는 공간이 고정 크기 단위의 리스트를 유지하면 된다. 클라이언트가 그 중 하나를 요청하면 첫 번째 항목을 반환하면 된다.
어려운 경우: 가변- 크기 빈 공간들의 집합으로 구성되어 있는 경우, 사용자-수준 메모리 할당 라이브러리에서(ex. malloc ,free), 세그멘터이션으로 물리 메모리를 관리하는 운영체제에서 발생한다. 어느 경우에도 외부 단편화가 존재. 빈 공간은 다양한 크기의 작은 조각으로 분할되어 결국 단편화 된다. 이때 빈 공간들의 전체 크기가 요청된 것보다 크더라도 하나의연속된 영역이 존재하지 않으면 요청은 실패할 수 있다.
💡 위의 경우 빈 공간의 전체 크기는 20바이트, but 10바이트 2개로 쪼개져 있다. 20바이트의 빈 공간이 있지만 15바이트의 요청은 실패한다. 이를 어떻게 관리 할 것인가 (빈 공간을 관리하는데 일반적으로 링크드 리스트 사용됨)분할과 병합
위의 예시를 빈 공간 링크드 리스트로 나타냄
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQGatK65O4smqoRR4T9HzLI19RT9xlLZn0Izw&usqp=CAU
(위의 그림은 1바이트를 요청 받아 원래 주소 20에 1바이트 반환하고 21에 길이 10에서 9로 줄어들었다)
10바이트를 초과하는 요청 → return NULL
10바이트 → 두 청크중 하나를 사용하여 충족
10바이트 미만 →분할 실시
요청을 만족 시킬 공간에 찾아가서 둘로 분할한다. 첫번째 청크는 사용자에게 다른 청크는 리스트에 남게 된다.

10바이트 3개로 이루어진 청크 리스트에 20을 요청 받으면 실패한다
이 문제는 청크가 반환 될때 빈 공간들을 병합함으로써 해결이 가능하다.
→항상 전체를 검색해야한다
