Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*****************************************************************/ /** Microsoft Windows for Workgroups **/ /** Copyright (C) Microsoft Corp., 1991-1992 **/ /*****************************************************************/
/* alloc.c --
* * History: * 10/06/93 gregj Created. * 11/29/93 gregj Added debug instrumentation. * */
#include "npcommon.h"
#include <npalloc.h>
#include <netlib.h>
//====== Memory allocation functions =================================
// Alloc a chunk of memory, quickly, with no 64k limit on size of
// individual objects or total object size.
//
void * WINAPI MemAlloc(long cb) { return (void *)::LocalAlloc(LPTR, cb); }
// Realloc one of above. If pb is NULL, then this function will do
// an alloc for you.
//
void * WINAPI MemReAlloc(void * pb, long cb) { if (pb == NULL) return ::MemAlloc(cb);
return (void *)::LocalReAlloc((HLOCAL)pb, cb, LMEM_MOVEABLE | LMEM_ZEROINIT); }
// Free a chunk of memory alloced or realloced with above routines.
//
BOOL WINAPI MemFree(void * pb) { return ::LocalFree((HLOCAL)pb) ? TRUE : FALSE; }
#ifdef DEBUG
MEMWATCH::MEMWATCH(LPCSTR lpszLabel) : _lpszLabel(lpszLabel) { _info.pNext = NULL; _info.cAllocs = 0; _info.cFrees = 0; _info.cbAlloc = 0; _info.cbMaxAlloc = 0; _info.cbTotalAlloc = 0; fStats = TRUE; MemRegisterWatcher(&_info); }
MEMWATCH::~MEMWATCH() { MemDeregisterWatcher(&_info); if (fStats || ((_info.cAllocs - _info.cFrees) != 0)) { if (!fStats) { OutputDebugString("Memory leak: "); } OutputDebugString(_lpszLabel); char szBuf[100]; wsprintf(szBuf, "%d allocs, %d orphans, %d byte footprint, %d byte usage\r\n", _info.cAllocs, _info.cAllocs - _info.cFrees, _info.cbMaxAlloc, _info.cbTotalAlloc); OutputDebugString(szBuf); } }
MemLeak::MemLeak(LPCSTR lpszLabel) : MEMWATCH(lpszLabel) { fStats = FALSE; }
MemOff::MemOff() { pvContext = MemUpdateOff(); }
MemOff::~MemOff() { MemUpdateContinue(pvContext); }
#endif /* DEBUG */
|