内存池简单实例.docx

上传人:b****4 文档编号:24267003 上传时间:2023-05-25 格式:DOCX 页数:5 大小:14.64KB
下载 相关 举报
内存池简单实例.docx_第1页
第1页 / 共5页
内存池简单实例.docx_第2页
第2页 / 共5页
内存池简单实例.docx_第3页
第3页 / 共5页
内存池简单实例.docx_第4页
第4页 / 共5页
内存池简单实例.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

内存池简单实例.docx

《内存池简单实例.docx》由会员分享,可在线阅读,更多相关《内存池简单实例.docx(5页珍藏版)》请在冰豆网上搜索。

内存池简单实例.docx

内存池简单实例

内存池简单实例

分类:

C/C++#include<stdlib.h>

#include<stdio.h>

#include<time.h>

#include<iostream>usingnamespacestd;classMemPool

{

public:

MemPool();

~MemPool();

void*Alloc();

voidFree(void*p);

private:

conststaticintblockSize=1024;

conststaticintitemSize=16;

structItemNode

{

ItemNode*next;

chardata[itemSize-sizeof(ItemNode*)];

};

structBlockNode

{

BlockNode*next;

ItemNodedata[blockSize/itemSize];

};

ItemNode*freeItemNodeHead;

BlockNode*memBlockNodeHead;

};MemPool:

:

MemPool():

memBlockNodeHead(NULL),freeItemNodeHead(NULL)

{

}MemPool:

:

~MemPool()

{

BlockNode*temp=memBlockNodeHead;

while(temp)

{

memBlockNodeHead=memBlockNodeHead->next;

deletetemp;

temp=memBlockNodeHead;

}

}void*MemPool:

:

Alloc()

{

if(freeItemNodeHead==NULL)

{

BlockNode*tempBlockNode=newBlockNode;

if(tempBlockNode==NULL)

{

perror("allocatememoryerror!

\n");

exit

(1);

}

if(memBlockNodeHead==NULL)

{

memBlockNodeHead=tempBlockNode;

memBlockNodeHead->next=NULL;

}

else

{

tempBlockNode->next=memBlockNodeHead;

memBlockNodeHead=tempBlockNode;

}

freeItemNodeHead=&(memBlockNodeHead->data[0]);

inti=0;

while(i<blockSize/itemSize-1)

{

tempBlockNode->data[i].next=&(tempBlockNode->data[i+1]);

++i;

}

tempBlockNode->data[i].next=NULL;

}

ItemNode*allocItemNode=freeItemNodeHead;

freeItemNodeHead=freeItemNodeHead->next;

returnallocItemNode;

}voidMemPool:

:

Free(void*p)

{

ItemNode*tempItemNode=static_cast<ItemNode*>(p);

tempItemNode->next=freeItemNodeHead;

freeItemNodeHead=tempItemNode;

}intmain()

{

MemPoolpool;

char*p=NULL;

clock_tstart,finish;

doubleduration;

longi=0;

start=clock();

while(i<10000000)

{

p=static_cast<char*>(pool.Alloc());

//p=newchar[16];

++i;

pool.Free(p);

//deletep;

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

cout<<"totaluse"<<duration<<"seconds"<<endl;

system("pause");

return0;

}

使用内存池的结果是:

totaluse0.245seconds

使用new,delete操作的结果是:

totaluse7.256seconds

结果相差近30倍,可见使用内存池对系统的性能有很大的提高

MemPool实现源码参见:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1