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.
 
 
 
 
 
 

111 lines
2.7 KiB

//+---------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1993 - 1994.
//
// File: cmallspy.hxx
//
// Contents: CMallocSpy definitions
//
// Classes:
//
// Functions:
//
// History: 24-Oct-94 Created.
//
//----------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
#define DIM(X) (sizeof(X)/sizeof((X)[0]))
class FAR CAddrNode32
{
public:
void FAR* m_pv; // instance
SIZE_T m_cb; // size of allocation in BYTES
ULONG m_nAlloc; // the allocation pass count
CAddrNode32 FAR *m_pnNext;
void FAR* operator new(size_t cb);
void operator delete(void FAR* pv);
static CAddrNode32 FAR* m_pnFreeList;
};
class CMallocSpy : public IMallocSpy
{
public:
CMallocSpy(void);
~CMallocSpy(void);
// IUnknown methods
STDMETHOD(QueryInterface) (REFIID riid, LPVOID *ppUnk);
STDMETHOD_(ULONG, AddRef) (void);
STDMETHOD_(ULONG, Release) (void);
// IMallocSpy methods
STDMETHOD_(SIZE_T, PreAlloc) (SIZE_T cbRequest);
STDMETHOD_(void *, PostAlloc) (void *pActual);
STDMETHOD_(void *, PreFree) (void *pRequest, BOOL fSpyed);
STDMETHOD_(void, PostFree) (BOOL fSpyed);
STDMETHOD_(SIZE_T, PreRealloc) (void *pRequest, SIZE_T cbRequest,
void **ppNewRequest, BOOL fSpyed);
STDMETHOD_(void *, PostRealloc) (void *pActual, BOOL fSpyed);
STDMETHOD_(void *, PreGetSize) (void *pRequest, BOOL fSpyed);
STDMETHOD_(SIZE_T, PostGetSize) (SIZE_T cbActual, BOOL fSpyed);
STDMETHOD_(void *, PreDidAlloc) (void *pRequest, BOOL fSpyed);
STDMETHOD_(BOOL, PostDidAlloc) (void *pRequest, BOOL fSpyed, BOOL fActual);
STDMETHOD_(void, PreHeapMinimize) (void);
STDMETHOD_(void, PostHeapMinimize) (void);
private:
ULONG m_cRef;
BOOL m_fWantTrueSize;
UINT m_cHeapChecks;
VOID * m_pvRealloc; // block we are throwing away during
// a realloc
ULONG m_cAllocCalls; // total count of allocation calls
CAddrNode32 FAR* m_rganode[1024]; // address instance table
// Instance table methods
VOID MemInstance();
VOID HeapCheck();
void DelInst(void FAR* pv);
CAddrNode32 FAR* FindInst(void FAR* pv);
void AddInst(void FAR* pv, SIZE_T cb);
void DumpInst(CAddrNode32 FAR* pn);
void VerifyHeaderTrailer(CAddrNode32 FAR* pn);
inline UINT HashInst(void FAR* pv) const
{
return ((UINT)((ULONG)pv >> 4)) % DIM(m_rganode);
}
BOOL IsEmpty(void);
void DumpInstTable(void);
void CheckForLeaks();
};
STDAPI GetMallocSpy(IMallocSpy FAR* FAR* ppmallocSpy);
#ifdef __cplusplus
}
#endif