Alloctor.h:
#ifndef _ALLOCTOR_H_
#define _ALLOCTOR_H_
void* operator new(size_t size);
void operator delete(void* p);
void* operator new[](size_t size);
void operator delete[](void* p);
void* mem_alloc(size_t size);
void mem_free(void* p);
#endif
Alloctor.cpp
#include"Alloctor.h"
#include"MemoryMgr.hpp"
void* operator new(size_t nSize)
{
return MemoryMgr::Instance().allocMem(nSize);
}
void operator delete(void* p)
{
MemoryMgr::Instance().freeMem(p);
}
void* operator new[](size_t nSize)
{
return MemoryMgr::Instance().allocMem(nSize);
}
void operator delete[](void* p)
{
MemoryMgr::Instance().freeMem(p);
}
void* mem_alloc(size_t size)
{
return malloc(size);
}
void mem_free(void* p)
{
free(p);
}
MemoryMgr.hpp
#ifndef _MemoryMgr_hpp_
#define _MemoryMgr_hpp_
#include<stdlib.h>
#include<assert.h>
#include <mutex>
#ifdef _DEBUG
#include<stdio.h>
#define xPrintf(...) printf(__VA_ARGS__)
#else
#define xPrintf(...)
#endif // _DEBUG
#define MAX_MEMORY_SZIE 128
class MemoryAlloc;
//内存块 最小单元
class MemoryBlock
{
public:
//所属大内存块(池)
MemoryAlloc* pAlloc;
//下一块位置
MemoryBlock* pNext;
//内存块编号
int nID;
//引用次数
int nRef;
//是否在内存池中
bool bPool;
private:
//预留
char c1;
char c2;
char c3;
};
//内存池
class MemoryAlloc
{
public:
MemoryAlloc()
{
_pBuf = nullptr;
_pHeader = nullptr;
_nSzie = 0;
_nBlockSzie = 0;
}
~MemoryAlloc()
{
if (_pBuf)
free(_pBuf);
}
//申请内存
void* allocMemory(size_t nSize)
{