2013-11-03 2 views
1

"힙 블록은 백 엔드 할당 자의 눈에는 바쁘다고 여겨지지만 여전히 응용 프로그램에서는 사용하지 않는 것이 중요합니다. 프론트 엔드 할당 자의 룩어 사이드 목록에있는 힙 블록은 여전히 ​​상태가 비지로 설정됩니다. " - 고급 Windows 디버깅 p.267Windows 힙 관리자 - 프런트 엔드 및 백 엔드 할당 자

내 질문에 : 힙 블록 상태가 사용 중으로 설정된 경우 프론트 엔드 할당 기가 LAL에 사용 가능한 것으로 추가되는 이유는 무엇입니까?

즉, 상태 플래그는 블록이 사용 중이거나 사용 중이라는 것을 나타냅니다. 그렇다면 자유 블록이 LAL에없는 이유와 상태 플래그가 통화 중으로 설정된 경우 해당 블록을 LAL에 할당 할 수있는 방법 (명령문이 사용 중일 때 또는 사용하지 않을 수 있음)은 무엇입니까?

+2

문서화되지 않은 구현 세부 사항에 대해 질문하는 중입니다. Windows의 모든 최신 버전의 응용 프로그램은 조각화가 적은 힙을 사용합니다. 그것은 광범위하게 리버스 엔지니어링되었습니다. 여러분이 읽고있는 책이 무엇이든간에 그것은 아닙니다. 너는 너의 시간을 낭비하고있어, 우리도 마찬가지야. –

+1

Microsoft는 Windows Vista에서 LAL 대신 Low Fragmentation 프런트 엔드 할당자를 사용하도록 기본적으로 전환하기로 결정했습니다. – vincentleest

답변

3

프런트 엔드 할당자는 이기 때문에 사용할 수있는 것으로 LAL에 추가합니다. 블록이 프론트 엔드 할당 자에게 해제되었으므로, 블록 할당 방법이 처음이었습니다. 프런트 엔드 할당 자의 다음 호출자는 프런트 엔드 할당 자의 관점에서 볼 때 무료이므로 적절한 크기의 블록을 요청할 수 있습니다. 해당 고객이 사용하고 있지 않습니다.

LAL의 핵심은 프런트 엔드 할당자가 백 엔드 할당자가 수행하는 작업을 최소화하는 것입니다. 따라서 프런트 엔드 할당자가 수행하는 작업은 LAL에서 프런트 엔드 할당 자에게 해제 된 블록을 백 엔드 할당 자로 반환하는 대신 유지하는 것입니다. 백 엔드 할당자는 이 사용 중이므로이므로 프런트 엔드 할당자가 사용 중이므로 사용 중이라고 표시합니다. 그러나 프런트 엔드 할당자는 백 엔드 할당 자에서 상태를 변경하지 않고도 할당 할 수 있습니다.

프런트 엔드 할당자가 LAL의 블록 사용 상태를 변경하면 LAL 지점을 완전히 무효화합니다. LAL에서 블록을 추가하거나 제거 할 때마다 (통화 중 상태를 변경하기 위해) 백 엔드 할당 자에게 이야기해야하며 LAL의 전체 지점은 프런트 엔드 할당자가이를 수행하지 못하도록하는 것이 었습니다.

+1

나는 완전히 요점을 얻는다. 나는 네가 그렇게 분명하게 만드는 방식을 좋아했다. – JohnnyCat

관련 문제