반응형
힙 블럭 합병(Coalecing), 해제 과정
[ 합병(Coalecing) ]
1) free된 영역이 서로 인접하다면
2) 병합시켜 큰 블럭으로 관리.
과정:
힙 블럭 해제 요청 -> 인접 영역이 free 상태인지 확인 -> 그렇다면 병합 -> 프리리스트 갱신
인접한 free 블럭을 기존 프리리스트에서 제거, 합병과정을 거친 후 합병된 블럭을 크기에 맞는 프리리스트로 갱신
-> 비용이 많이듬! 그런데도 굳이 합병을 하는 이유는??
: 힙 단편화(heap fragmentation)를 회피하기 위해.
합병 방식을 알았으니, 합병을 고려한 힙 해제 과정을 정리하자.
[ 힙 해제 과정 ]
1) 프런트엔드 할당자가 해당 프리 블록을 처리할 수 있는 지 요청.
2) 힙 관리자는 인접한 프리블록이 있는 지 확인.
3) 있다면 합병
인접 블록 프리리스트에서 제거 표시
새로운 블럭을 프론트나 백엔드 프리리스트에 추가
새로운 블럭이 프리 상태임을 표시하기 위해 플래그 갱신
4) 합병할 상황이 아니라면
프론트나 백엔드 프리리스트에 추가하고
free 상태임을 플래그 갱신
반응형
'취약점 분석 > 힙(Heap)' 카테고리의 다른 글
힙 손상 탐지(1) - 초기화 안 된 상태로 사용 (0) | 2019.03.13 |
---|---|
힙의 세부 항목 조회 (0) | 2019.03.12 |
힙 할당 메커니즘 (기초) (0) | 2019.03.09 |
전역플래그 GFlgas 설정 위치 (0) | 2019.03.09 |
실질적으로 할당된 힙 크기 구하기 (0) | 2018.05.09 |