Linux, 특히 ubuntu의 glibc 2.17 버전의 힙 관리 측면이 궁금합니다.
각 힙의 마지막 블록(최상위 블록 또는 와일드 블록)은 비어 있는 경향이 있으며 일부 비트가 잘라내어 추가되어 필요한 경우 크기가 변경된다는 것을 알고 있습니다 sbrk()
(첫 번째 힙인 경우?).
그러나 내가 찾을 수 없는 것은: 와일드 블록을 할당하는 것이 가능합니까? 즉, 힙의 가장 높은 블록이 사용 중이라는 의미입니까?
이 차이는 이론적인 중요성만 있는 것처럼 보이지만 외부 메타데이터 없이 메모리 내 힙을 분석할 수 있는지 여부에 대해 몇 가지 의미를 갖습니다.
답변1
나는 glibc의 구현을 모르지만Malloc 작성자: Doug Lea대답은 '아니요'입니다. 링크에서 인용하려면 다음을 수행하십시오.
와일드 블록을 다른 모든 블록보다 "더 큰" 것으로 처리하고(시스템 제한에 따라 다름) 최고 우선 순위 스캔에 사용합니다. 이로 인해 다른 블록이 없는 경우에만 항상 와일드 블록이 사용되어 예방 가능한 조각화를 방지할 수 있습니다.
나는 불변성이 기술적으로 위반될 수 있는 한 가지 경우가 있다고 생각합니다. 즉, 사용자가 남아 있는 모든 시스템 메모리의 크기가 되는 블록을 할당하는 경우입니다.
야생을 관리하는 방법에 대한 보다 심층적인 논의Wilson; Johnstone; Boles: "동적 스토리지 할당: 설문 조사 및 중요 검토"국제 메모리 관리 근무 주간, 1995.