1、内存池简单实例内存池简单实例 分类: C/C+#include <stdlib.h>#include <stdio.h>#include <time.h>#include <iostream>using namespace std;class MemPool public: MemPool(); MemPool(); void* Alloc(); void Free(void* p); private: const static int blockSize = 1024; const static int itemSize = 16; struc
2、t ItemNode ItemNode *next; char dataitemSize - sizeof(ItemNode*); ; struct BlockNode BlockNode *next; ItemNode datablockSize/itemSize; ; ItemNode *freeItemNodeHead; BlockNode *memBlockNodeHead;MemPool:MemPool():memBlockNodeHead(NULL), freeItemNodeHead(NULL)MemPool:MemPool() BlockNode *temp = memBloc
3、kNodeHead; while(temp) memBlockNodeHead = memBlockNodeHead->next; delete temp; temp = memBlockNodeHead; void* MemPool:Alloc() if(freeItemNodeHead = NULL) BlockNode *tempBlockNode = new BlockNode; if(tempBlockNode = NULL) perror(allocate memory error!n); exit(1); if(memBlockNodeHead = NULL) memBlo
4、ckNodeHead = tempBlockNode; memBlockNodeHead->next = NULL; else tempBlockNode->next = memBlockNodeHead; memBlockNodeHead = tempBlockNode; freeItemNodeHead = &(memBlockNodeHead->data0); int i = 0; while(i < blockSize/itemSize -1) tempBlockNode->datai.next = &(tempBlockNode->
5、datai+1); +i; tempBlockNode->datai.next = NULL; ItemNode *allocItemNode = freeItemNodeHead; freeItemNodeHead = freeItemNodeHead->next; return allocItemNode;void MemPool:Free(void* p) ItemNode *tempItemNode = static_cast<ItemNode*>(p); tempItemNode->next = freeItemNodeHead; freeItemNod
6、eHead = tempItemNode;int main() MemPool pool; char *p = NULL; clock_t start, finish; double duration; long i = 0; start = clock(); while(i < 10000000) p = static_cast<char*>(pool.Alloc(); /p = new char16; +i; pool.Free(p); /delete p; finish = clock(); duration = (double)(finish - start)/CLOCKS_PER_SEC; cout << total use << duration << seconds << endl; system(pause); return 0;使用内存池的结果是:total use 0.245 seconds使用new,delete操作的结果是:total use 7.256 seconds结果相差近30倍,可见使用内存池对系统的性能有很大的提高MemPool实现源码参见:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1