2012-11-07 6 views
0

지난 4 년 동안 힙 손상을 디버깅하기 위해 pageheap을 사용했습니다. 일반적으로 나는 그것에 문제가 없다. 하지만 지금 나는 이상한 행동에 직면 해있다. 다음 플래그와 함께 세계 플래그를 사용하여 WIN7-SP1-86 호스트에 내 프로세스에 pageheap을 활성화 한 후 : -enable 힙 꼬리 내가와 충돌이 발견 -enable 힙 -enable 페이지 힙Pageheap은 많은 메모리를 사용합니다.

을 확인 무료 체크 아웃 외 메모리 예외. ! address -summary 명령은 ~ 90 %의 가상 메모리가 PageHeap에 의해 소비되었다고 말했습니다.

필자가 아는 바와 같이, 페이지 힙이 그렇게 많은 양의 메모리 오버 헤드를 유발해서는 안되기 때문에 실제로 이상합니다.

누군가 이러한 행동의 원인을 설명해 주시겠습니까?

+3

pageheap tail checking은 각 할당 된 블록의 끝에 보호 된 페이지를 오른쪽으로 추가합니다. 페이지는 일반적으로 4K이며, 이는 메모리가 증가하는 이유입니다. 가장 작은 블록조차도 페이지 끝에 할당되어 총 8K를 낭비합니다. 예를 들어, 내가 쓰는 앱 중 하나에 대해 메모리 사용량이 30M에서 400M으로 증가합니다. 나는 작은 블록을 많이 할당하고 있으며, 아직 최적화 단계에 있지 않습니다. – ActiveTrayPrntrTagDataStrDrvr

+3

응용 프로그램에 메모리 누수가있을 가능성이 있습니까? Pageheap은 메모리 누수의 효과를 확대합니다. –

+1

! heap -s는 몇 개의 블록을 보여줄 것이며, 위에서 언급 한 것처럼 가장 작은 블록조차도 8K가 필요하므로 메모리 부족은 일반적으로 놀랄 일이 아닙니다 –

답변

0

전체 페이지 힙이 활성화 된 응용 프로그램을 실행하면 각 'malloc'에 2 페이지 (4kb)가 할당됩니다. 메모리가 해제되면이 페이지 (또는 첫 번째 페이지 일 수도 있음)는 여전히 '예약'상태입니다. 물리적 또는 페이지 파일 메모리를 차지하지 않지만 가상 주소 범위를 사용할 수 없도록 설정하면 액세스 위반이 발생합니다. 이 메모리에 액세스하려고합니다. 이렇게하면 read-after-free 종류의 버그를 잡을 수 있습니다. 따라서 응용 프로그램의 가상 주소 공간은 각 malloc에 ​​대해 적절하게 무료로 호출하더라도 계속 증가합니다.

관련 문제