• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签: 内存管理  

资源简介

根据自己的思路,实现一个简单的内存管理结构,其中利用了链表作为遍历方式。

资源截图

代码片段和文件信息

/*
*李坤昱
*QQ:326087275@qq.com
*/
//MFC打开下面这个注释
//#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;
}
//初始化内存池
bool MemoryPool_::InitMemPool(int AllocSize)
{
if (0 == m_Memory)
{
m_Memory = (PMemoryStore)malloc(sizeof(MemoryStore));
m_Memory->Init();
}
if (0 == m_Memory)
return false;
//构建池子
if (0 < AllocSize)
{
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;

//分配内存失败
if (0 ==  m_Memory->StartAddress)
{
WriteLastError(“this MemoryAlloc is Not Valid“);
return false;
}
m_MemoryEnd = m_Memory;
return true; 
}

//创建下一个内存池
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();
//构建池子
if (0 < AllocSize)
{
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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      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


评论

共有 条评论