📄 myheap.cpp
字号:
// MyHeap.cpp: implementation of the CMyHeap class.
//
//////////////////////////////////////////////////////////////////////
#include "basefunc.h"
#include "MyHeap.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMyHeap::CMyHeap(LPCTSTR pszClassName)
{
m_hHeap =::HeapCreate(0, 0, 0);
m_uNumAllocsInHeap = 0;
m_lMaxAllocsInHeap = 0;
if (pszClassName)
m_strName = pszClassName;
}
//////////////////////////////////////////////////////////////////////
CMyHeap::~CMyHeap()
{
if (m_hHeap)
{
::HeapDestroy(m_hHeap);
::DebugMsg("heap of class %s destroied, with max alloc(%ld).", m_strName.c_str(), m_lMaxAllocsInHeap);
}
if (m_uNumAllocsInHeap != 0)
{
if (!m_strName.empty())
::LogMsg("CMyHeap::~CMyHeap() 的[%s]有[%d]个内存块没有释放", m_strName.c_str(), m_uNumAllocsInHeap);
else
::LogMsg("CMyHeap::~CMyHeap() 有[%d]个内存块没有释放", m_uNumAllocsInHeap);
}
}
//////////////////////////////////////////////////////////////////////
void * CMyHeap::Alloc(size_t size)
{
IF_NOT (m_hHeap)
return NULL;
if(size == 0)
return false;
// alloc mem for new obj
void* p =::HeapAlloc(m_hHeap, HEAP_ZERO_MEMORY, size);
if (p)
{
::InterlockedIncrement(&m_uNumAllocsInHeap);
if (m_uNumAllocsInHeap > m_lMaxAllocsInHeap)
::InterlockedExchange(&m_lMaxAllocsInHeap, m_uNumAllocsInHeap);
}
return p;
}
//////////////////////////////////////////////////////////////////////
void CMyHeap::Free(void* p)
{
IF_NOT (p)
return;
IF_NOT (m_hHeap)
return;
IF_NOT(m_uNumAllocsInHeap > 0)
::LogMsg("CMyHeap::Free() 的[%s]内存块数量错误!", m_strName.c_str());
// free it...
if (::HeapFree(m_hHeap, 0, p))
{
::InterlockedDecrement(&m_uNumAllocsInHeap);
}
}
//////////////////////////////////////////////////////////////////////
BOOL CMyHeap::IsValidPt(void* p)
{
if (!m_hHeap || !p)
return false;
if ((DWORD)p < 0x00010000 || (DWORD)p >= 0x7FFEFFFF) // user address range from 1M--2G-64k
return false;
if (::IsBadCodePtr((FARPROC)p))
return false;
return ::HeapValidate(m_hHeap, 0, p);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -