내 응용 프로그램 내에 기본 메모리 프로파일 러를 구현하려고합니다 (예, 강력한 외부 소프트웨어의 존재를 알고 있습니다). 할당 훅을 사용하는 방법에 대한 몇 가지 온라인 예제를 연구 해왔고 메모리 할당을 계산할 부분을 얻었다. 메모리가 할당 될 때이 카운터를있는 물건의 크기를 검색 int
변수를 증가하기 쉬운 반면, 그러나Allocator 후크를 사용할 때 해제되는 바이트를 검색하는 방법은 무엇입니까?
int64_t memUsage (0);
int __cdecl MyAllocHook(
int nAllocType,
void * pvData,
size_t nSize,
int nBlockUse,
long lRequest,
const unsigned char * szFileName,
int nLine
)
{
if (nAllocType ==_HOOK_ALLOC)
{
memUsage += nSize;
}
else if (nAllocType == _HOOK_FREE)
{
//HOW-TO: memUsage -= nSize; ???
}
return(TRUE);
}
: 그것은 즉, 더 많거나 적은 다음과 같습니다 단지 CtrSetAllocHook
와 함께 사용자 정의의 malloc을 설치하는 방법에 대한 것입니다 nSize
에서 할당 된 메모리를 해제 할 때 어떻게 카운터를 줄여야하는지 알 수 없습니다. 이유는 메모리를 확보하기 위해 malloc
을 호출하면 (즉, nAllocType 매개 변수 = _HOOK_FREE_), 위의 함수의 매개 변수 nSize
은 항상 0과 같습니다. 즉, malloc 훅 안에서 해제 된 바이트 수를 저장할 수 없다는 의미입니다.
이 자유 메모리 모드로 호출 될 때 누군가가 할당 후크를 사용하여 memUsage
카운터를 줄일 수있는 방법을 이해할 수 있습니까?
힙 관리 저장소 정보를 알고 계십니까? 실제 데이터 옆에있는 힙 블록 크기. 'pvData'를 감소시킬 때 (주소 크기에 의해) 블록의 크기를 자유롭게 찾을 수 있습니다. Google [MSVC heap management] (예 : [CRT Debug Heap Details]) (https://msdn.microsoft.com/en-us/library/974tc9t1.aspx)가 도움이 될 수 있습니다. – Scheff
태그가 조금 있습니다. 조금 오도. C++에는 할당 자에 대한 개념이있어 문제와는 아무런 관련이 없습니다. ([** C++ **] (http://stackoverflow.com/questions/tagged/c%2b%2b) 의심 스럽습니다.)'_CrtSetAllocHook'는 MS CRT와 관련이있는 것 같습니다. 사실, C++ 표준은 새롭고 삭제 된 것이 내부적으로 사용해야하는 것을 언급하지 않습니다. Microsoft C++의 경우, 아마도'malloc()'및'free()'구현에서 사용되는 것일 것입니다. – Scheff
@Scheff 귀하의 의견에 감사드립니다. 그러나, 나는 그것이 당신이 말하는 것에 많은 불분명 한 점들이 있다는 것을 두려워합니다. 우선, void 포인터에 대해 산술 연산이 불법이므로'pvData'를 감소시키는 것은 무엇을 의미합니까? 둘째, 당신이 제안한 문서를 읽고 나서, 나는'pvData'를 사용하여 mem 크기를 되 찾는 방법을 모르겠습니다. 직관적으로 나는 (size_t *) (pvData)'또는'((size_t *) ptr) -1)'이 줄 수 있다고 생각했지만, 그렇지 않았다. – Louis15