資源簡(jiǎn)介
根據(jù)自己的思路,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的內(nèi)存管理結(jié)構(gòu),其中利用了鏈表作為遍歷方式。

代碼片段和文件信息
/*
*李坤昱
*QQ:326087275@qq.com
*/
//MFC打開下面這個(gè)注釋
//#include?“stdafx.h“
#include?“TestMemoryPool.h“
MemoryPool_::MemoryPool_(unsigned?long?long?AllocSize):m_Memory(0)m_MemHead(0)
m_MemCurrent(0)m_MemEnd(0)m_nInitPoolSize(AllocSize)
{
m_nCompareMini?=?1;
m_nCompareMax?=?5;
memset(m_LastError0sizeof(m_LastError));
}
MemoryPool_::~MemoryPool_()
{
MemPoolFree();
FreeList();
}
bool?MemoryPool_::SetComPareMemMini(int?nMini)
{
if?(1?>=?nMini)
{
return?false;
}
m_nCompareMini?=?nMini;
return?true;
}
bool?MemoryPool_::SetComPareMemMax(int?nMax)
{
if?(1?>=?nMax)
{
return?false;
}
m_nCompareMax?=?nMax;
return?true;
}
char?*MemoryPool_::GetLastError()
{
return?m_LastError;
}
bool?MemoryPool_::WriteLastError(const?char?*data)
{
if?(0?==?data)
return?false;
memset(m_LastError0sizeof(m_LastError));
memcpy(m_LastErrordatasizeof(data));
return?true;
}
//初始化內(nèi)存池
bool?MemoryPool_::InitMemPool(int?AllocSize)
{
if?(0?==?m_Memory)
{
m_Memory?=?(PMemoryStore)malloc(sizeof(MemoryStore));
m_Memory->Init();
}
if?(0?==?m_Memory)
return?false;
//構(gòu)建池子
if?(0? {
m_Memory->MemVolumeDose?=?AllocSize;
char?*Mem?=?(char?*)malloc(AllocSize);
m_Memory->StartAddress?=?(unsigned?long?long)Mem;
m_Memory->EndAddress?=?(m_Memory->StartAddress?+?AllocSize);
}
else
{
m_Memory->MemVolumeDose?=?MEMPOOLSIZE;
char?*Mem?=?(char?*)malloc(MEMPOOLSIZE);
m_Memory->StartAddress?=?(unsigned?long?long)Mem;
m_Memory->EndAddress?=?(m_Memory->StartAddress?+?MEMPOOLSIZE);
}
m_Memory->Count?=?1;
m_Memory->CurrentUsageAmount?=?0;
m_Memory->SurplusVolumeDose?=?m_Memory->MemVolumeDose;
//分配內(nèi)存失敗
if?(0?==??m_Memory->StartAddress)
{
WriteLastError(“this?MemoryAlloc?is?Not?Valid“);
return?false;
}
m_MemoryEnd?=?m_Memory;
return?true;?
}
//創(chuàng)建下一個(gè)內(nèi)存池
bool?MemoryPool_::CreateNextMemPool(int?AllocSize)
{
PMemoryStore?memoryPool?=?GetPoolHead();
if?(0?==?memoryPool)
{
InitMemPool(((AllocSize?+?m_nCompareMini?>=?MEMPOOLSIZE)???(AllocSize?+?m_nCompareMini)?:?MEMPOOLSIZE));
return?true;
}
while?(memoryPool?&&?0?!=?memoryPool->Next)
memoryPool?=?memoryPool->Next;
memoryPool->Next?=?(PMemoryStore)malloc(sizeof(MemoryStore));
memoryPool->Next->Init();
//構(gòu)建池子
if?(0? {
memoryPool->Next->MemVolumeDose?=?AllocSize;
char?*Mem?=?(char?*)malloc(AllocSize);
memoryPool->Next->StartAddress?=?(unsigned?long?long)Mem;
memoryPool->Next->EndAddress?=?(memoryPool->Next->StartAddress?+?AllocSize);
}
else
{
memoryPool->Next->MemVolumeDose?=?MEMPOOLSIZE;
char?*Mem?=?(char?*)malloc(MEMPOOLSIZE);
memoryPool->Next->StartAddress?=?(unsigned?long?long)Mem;
memoryPool->Next->EndAddress?=?(memoryPool->Next->StartAddress?+?MEMPOOLSIZE);
}
memoryPool->Next->Count?=?(memoryPool->Count?+?1);
memoryPool->Next->CurrentUsageAmount?=?0;
memoryPool->Next->SurplusVolumeDose?=?memoryPool->Nex
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????12505??2018-03-15?21:58??Memory\TestMemoryPool.cpp
?????文件???????3683??2018-03-15?21:59??Memory\TestMemoryPool.h
?????目錄??????????0??2018-03-15?22:05??Memory
-----------?---------??----------?-----??----
????????????????16188????????????????????3
- 上一篇:帆哥模塊.ce
- 下一篇:PSOT粒子群算法工具箱
評(píng)論
共有 條評(píng)論