资源简介
根据自己的思路,实现一个简单的内存管理结构,其中利用了链表作为遍历方式。
代码片段和文件信息
/*
*李坤昱
*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
- 上一篇:帆哥模块.ce
- 下一篇:PSOT粒子群算法工具箱
相关资源
- 用C实现的段页式内存管理
- 仿照linux的buddy+slub内存管理算法
- 操作系统 内存管理课程设计报告
- 操作系统实验,进程调度,作业调度
- TLSF开源算法
- 进程调度与内存管理:这是我花了很
- linux内存管理实验报告
- 操作系统实验五 内存管理
- 动态分区分配内存管理源代码附有实
- 操作系统实验之内存管理
- 操作系统内存管理实验报告及源代码
- nachos内存管理
- Linux内存管理详解.ppt
- 2015 Spark技术峰会-Spark优化及实践经验
- 实现虚拟内存管理的nachos操作系统实
- 编写程序实现采用可变分区方法管理
- linux的内存管理-总结文档
- 操作系统实验实验四 模拟内存管理程
- 操作系统内存管理 采用可变分区方式
评论
共有 条评论