最近做了一个小项目,做完后感觉可以用内存池进行优化,此篇是记录内存池基础知识学习的笔记(只是笔记,不是原创内容噢)
一、前言
1、采用new/delete或者malloc/free,在堆上频繁地分配和释放,会有性能上的损失;
2、采用new/delete或者malloc/free,系统中会出现大量的内存碎片,降低了内存使用率。
二、内存池
这里只描述固定内存池
1、固定内存池 = n个固定大小的内存块
2、内存块 = 1个内存池块头 + n个固定大小的内存单元(数量由内存块大小决定)
3、内存池块头:描述了与之关联的内存块的使用信息
内存池块头的结构体定义:
struct MemoryBlock
{
unsigned short nSize; //记录所有内存分配单元的大小(不包括MemoryBlock结构体本身的大小)
unsigned short nFree; //记录一个内存块中自由分配单元的数量
unsigned short nFirst; //记录内存块中剩余自由单元中第1个自由单元
unsigned short nDunmmyAlign1;
MemoryBlock* pNext; //指向下一个内存块
char aData[1];
static