2010-03-10 5 views
0

Visual C++ 런타임 힙에 대해 HeapCompact()과 동일한 효과를 낼 수 있습니까? 어떻게하면 될까요?VC++ 런타임 힙을 압축 할 수 있습니까?

+0

"런타임 힙"이란 무엇입니까? 다른 종류가 있습니까? –

+0

@Neil Butterworth : malloc()이 사용하는 것을 의미합니다. Win32에서는 프로그램이 HeapCreate()를 사용하여 추가 힙을 만들 수 있습니다. – sharptooth

+0

관심 없으면 자유 블록 통합이 자동으로 일어나지 않는다는 놀라운 이유가 있습니까? http://msdn.microsoft.com/en-us/library/cc265897.aspx –

답변

2

_get_heap_handle을 사용하여 CRT 힙에 대한 처리를 가져온 다음 HeapCompact를 호출 할 수 있습니다. 이것이 나 자신을 시험해 보지 않았기 때문에 이것이 지원되는지/안정적인지 확실하지 않다. HeapCompact를 serialize 된 모드로 호출하여이 작업의 기회를 갖기를 원한다고 생각합니다.

이 문제가 발생하면 핸들의 HeapSetInformation (_get_heap_handle의 MDSN 문서)을 호출하고 내장 LFH가 자동으로 압축을 처리하도록합니다.

2

IIRC 자신의 메모리 관리자를 쓰지 않고도. 또한 작업의 중요하지 않은 부분입니다. 특히 인접한 더 작은 빈 메모리 블록을 더 큰 메모리 블록과 결합하는 것 이상의 작업을 수행하려는 경우 더욱 그렇습니다.

+0

실제로 인접 블록을 결합하는 것이 HeapCompact()가 수행하는 유일한 방법입니다. – sharptooth

+1

더 좋은 아이디어가 없으려면 * 정말 *해야합니다. – Spike

+0

예, 메모리 할당 오류의 원인 중 하나가 힙 조각입니다. 'malloc()'이'NULL'을 반환하는 경우'HeapCompact (GetProcessHeap(), 0)'을 시도하고 손가락을 교차시킨 다음 malloc()을 다시 시도 할 수 있습니다. 실제로 나쁜 해결책이지만 시간이 부족할 때 도움이 될 수 있습니다. 프로그램의 메모리 할당 전략을 실제로 최적화/변경해야합니다. 메모리 매핑 파일 ([link1] (http://msdn.microsoft.com/en-en/library/dd997372.aspx) 및 [link2] (http://en.wikibooks.org/wiki/Optimizing_C%2B % 2B/일반 _ 최적화 _ 기술/입력/출력 # 메모리 매핑 _ 파일)). –

관련 문제