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

代码片段和文件信息
/*
*李坤昱
*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粒子群算法工具箱
相关资源
- 基于numa架构的tcmalloc内存管理算法
- 操作系统课程设计 内存管理
- 操作系统内存管理仿真
- 操作系统原理实验报告+源代码哲学家
- glibc内存管理ptmalloc源代码分析
- malloc实现源码
- linux源代码分析之内存管理
- XV6阅读报告包含进程线程、内存管理
- 操作系统进程管理和内存管理demo
-
zw_ob
jective-C高级编程iOS与OSX多线程和 - 内存管理算法模拟(首次分配、邻近
- 十六进制转物理地址
- qemu内存管理流程
- 内存管理选择题.txt
- 虚拟内存管理基于时钟策略的页面置
- 伙伴系统Buddy System 内存管理
- 操作系统实验三源代码加实验报告
- nginx slab内存管理精简源码及注释
- 系统级编程lab7 第七次实验 四川大学
- 四川大学操作系统虚拟内存管理实验
- 操作系统进程管理与内存管理QT实现界
- 用C实现的段页式内存管理
- 仿照linux的buddy+slub内存管理算法
- 操作系统 内存管理课程设计报告
- 操作系统实验,进程调度,作业调度
- TLSF开源算法
- 进程调度与内存管理:这是我花了很
- linux内存管理实验报告
- 操作系统实验五 内存管理
- 动态分区分配内存管理源代码附有实
评论
共有 条评论