본문 바로가기

힙 블럭 합병(Coalecing), 해제 과정 힙 블럭 합병(Coalecing), 해제 과정 [ 합병(Coalecing) ]1) free된 영역이 서로 인접하다면2) 병합시켜 큰 블럭으로 관리.과정:힙 블럭 해제 요청 -> 인접 영역이 free 상태인지 확인 -> 그렇다면 병합 -> 프리리스트 갱신 인접한 free 블럭을 기존 프리리스트에서 제거, 합병과정을 거친 후 합병된 블럭을 크기에 맞는 프리리스트로 갱신-> 비용이 많이듬! 그런데도 굳이 합병을 하는 이유는??: 힙 단편화(heap fragmentation)를 회피하기 위해. 합병 방식을 알았으니, 합병을 고려한 힙 해제 과정을 정리하자. [ 힙 해제 과정 ]1) 프런트엔드 할당자가 해당 프리 블록을 처리할 수 있는 지 요청.2) 힙 관리자는 인접한 프리블록이 있는 지 확인.3) 있다면 합병인..
힙 할당 메커니즘 (기초) 힙 할당 메커니즘 모든 힙 블럭에는 힙 정보를 포함하는 힙 메타데이터 8bytes를 포함한다.따라서 8bytes를 요청하였을 경우 +8된 16bytes의 힙 청크가 있는 지 찾는다. 프론트엔드 할당자도 백엔드의 프리리스트도 블럭 크리별로 나뉘어져 각각이 링크드 리스트로 관리된다.그런데, 힙 요청은 8bytes 단위로 요청하나 힙 블럭에는 항상 힙 메타데이터가 포함되므로 8bytes는 요청할 수 없다. ==> 따라서 프리리스트의 [0]번째 인덱스는 사용되지 않거나 특수 목적으로 사용된다.- 프론트엔드 할당자는 [0]인덱스를 사용하지 않음.- 백엔드 할당자는 [0]인덱스에 [127]번째 블럭 크기보다 크면서 Virtual Alloc을 해야할 정도로는 크지 않는 힙들을 전부 담는다. [할당 작업 순서]1) 프..