📄 memory.h
字号:
#ifndef _GOS_MEMORY_H_
#define _GOS_MEMORY_H_
#define ZeroMemory(pDest,nLength) FillMemory(pDest,nLength,0)
#define AllocSize(pBlock) (*(PDWORD(pBlock)-1))
#define _msize(pBlock) (pBlock?AllocSize(pBlock):0)
#define malloc(size) g_pKernel->GetCurHeap().Alloc(size)
#define realloc(memblock,size) g_pKernel->GetCurHeap().ReAlloc(memblock,size)
#define free(memblock) g_pKernel->GetCurHeap().Free(memblock)
#define memmove(dest,src,count) CoyMemory(dest,src,count)
#define memcpy(dest,src,count) CoyMemory(dest,src,count)
#define memset(dest,c,count) FillMemory(dest,count,c)
#define IsWritablePtr(ptr) g_pKernel->GetCurHeap().IncludePtr(ptr)
#define PAGESIZE 4096
#define PAGESHIFT 12
PVOID operator new(UINT nSize,PVOID pObj);
VOID operator delete(PVOID pData,PVOID pObj);
PVOID operator new[](UINT nSize);
VOID operator delete[](PVOID pData);
PVOID operator new(UINT nSize);
VOID operator delete(PVOID pData);
class CHeap
{
public:
void Create(PVOID pBlock);
PVOID Delete();
PVOID Alloc(DWORD nSize);
PVOID ReAlloc(PVOID pBlock,DWORD nSize);
void Free(PVOID pBlock);
BOOL IncludePtr(PCVOID pBlock);
DEBUG_ONLY(DWORD m_nPushCnt);
public:
static ElementCount(int nElementBytes,int nCount,int nReservedBytes=0);
private:
PDWORD m_pHeap;
PDWORD MergeBlock(PVOID pBlock,DWORD nGroup,PDWORD pToGroup);
void SplitBlock(PVOID pBlock,DWORD nGroup,DWORD nToGroup);
PVOID PageAlloc(PVOID pBlock,DWORD nSize);
void PageFree(PVOID pBlock,DWORD nSize);
void ChainPush(PDWORD pBlock,DWORD nGroup);
PDWORD ChainPop(DWORD nGroup);
static DWORD Group(DWORD nSize);
};
void CopyMemory(PVOID pDest,PCVOID pSrc,DWORD nLength);
void FillMemory(PVOID pDest,DWORD nLength,BYTE nFill);
#endif //_GOS_MEMORY_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -