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.8 KiB
111 lines
2.8 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_PTR)pv >> 4)) % DIM(m_rganode);
|
|
}
|
|
|
|
BOOL IsEmpty(void);
|
|
void DumpInstTable(void);
|
|
void CheckForLeaks();
|
|
|
|
};
|
|
|
|
STDAPI GetMallocSpy(IMallocSpy FAR* FAR* ppmallocSpy);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|