c内存池概要1
C++?内存池
???下载示例工程?– 105Kb
???下载源代码?– 17.3Kb
目录
??引言
??它怎样工作
??示例
??使用这些代码
??好处
??关于代码
??ToDo
??历史
?
引言
C/C++的内存分配(通过malloc或new)可能需要花费很多时。
更糟糕的是,随着时间的流逝,内存(memory)将形成碎片,所以一个应用程序的运行会越来越慢当它运行了很长时间和/或执行了很多的内存分配(释放)操作的时候。特别是,你经常申请很小的一块内存,堆(heap)会变成碎片的。
解决方案:你自己的内存池
一个(可能的)解决方法是内存池(Memory Pool)。
在启动的时候,一个”内存池”(Memory Pool)分配一块很大的内存,并将会将这个大块(block)分成较小的块(smaller chunks)。每次你从内存池申请内存空间时,它会从先前已经分配的块(chunks)中得到,而不是从操作系统。最大的优势在于:
??非常少(几没有)?堆碎片
??比通常的内存申请/释放(比如通过malloc,?new等)的方式快
另外,你可以得到以下好处:
??检查任何一个指针是否在内存池里
??写一个”堆转储(Heap-Dump)”到你的硬盘(对事后的调试非常有用)
??某种”内存泄漏检测(memory-leak detection)”:当你没有释放所有以前分配的内存时,内存池(Memory Pool)会抛出一个断言(assertion).
它怎样工作
让我们看一看内存池(Memory Pool)的UML模式图:
这个模式图只显示了类CMemoryPool的一小部分,参看由Doxygen生成的文档以得到详细的类描述。
?
一个关于内存块(MemoryChunks)的单词
你应该从模式图中看到,内存池(Memory Pool)管理了一个指向结构体SMemoryChunk?(m_ptrFirstChunk,?m_ptrLastChunk, and?m_ptrCursorChunk)的指针。这些块(chunks)建立一个内存块(memory chunks)的链表。各自指向链表中的下一个块(chunk)。当从操作系统分配到一块内存时,它将完全的被SMemoryChunks管理。让我们近一点看看一个块(chunk)。
typedef?struct?SMemoryChunk{牋TByte?Data?牋牋牋牋牋牋?/燭he燼ctual燚ataxygen生成的文档以得到牋std::size_t燚ataSize?牋牋//燬ize爋f爐he?Data-Block详细的类描述。
牋std::size_t燯sedSize?牋牋//燼ctual爑sed燬ize-Block详牋bool營sAllocationChunk?牋//爐rue,爓hen爐his燤emoryChunks述。
?
一牋牋牋牋牋牋牋牋牋牋牋牋牋牋//燩oints爐o燼?Data-Blocks燤emoryChunks述。
牋牋牋牋牋牋牋牋牋牋牋牋牋牋//爓hich燾an燽e燿eallocated爒ia?free()ks述。
?
一个关于内存块(Me牋SMemoryChunk?Next?牋牋牋//燩ointer爐o爐he燦ext燤emoryChunk述。
?
一个关于牋牋牋牋牋牋牋牋牋牋牋牋牋牋//爄n爐he燣ist?may燽e燦ULL)ext燤emoryChunk述。
?}燬memoryChunk;/
每个块(chunk)持有一个指针,指针指向:
??一小块内存(Data),
??从块(chunk)开始的可用内存的总大小(DataSize),
??实际使用的大小(UsedSize),
??以及一个指向链表中下一个块(chunk)的指针。
第一步:预申请内存(pre-allocating the memory)
当你调用CmemoryPool的构造函数,内存池(Memory Pool)将从操作系统申请它的第一块(大的)内存块(memory-chunk)
/*Constructor******************/CMemoryPool::CMemoryPool(const爏td::size_t?sInitialMemoryPoolSize,存池牋牋牋牋牋牋牋牋牋牋牋牋燾onst爏td::size_t?sMemoryChunkSize,ialMemoryPoolSi牋牋牋牋牋牋牋牋牋牋牋牋燾onst爏td::size_t?sMinimalMemorySizeToAllocate,lSize,存池(Memor牋牋牋牋牋牋牋牋牋牋牋牋燽ool燽SetMemoryData)nimalMemorySiz{牋m_ptrFirstChunk牋=燦U
您可能关注的文档
最近下载
- 最新人教版六年级上册数学1-8单元单元测试卷及期中期末卷(含答案).pdf VIP
- [黄浦区2009学年度第一学期期终基础学业测评高三英语附答案.doc VIP
- 2025至2030中国C反应蛋白(CRP)试验行业产业运行态势及投资规划深度研究报告.docx
- 2009学年奉贤区调研测试高三英语试卷(附答案).doc VIP
- 噬神者:爆裂 怪物素材获取方法.pdf VIP
- 第4章物质结构元素周期律-高中化学全册必背章节知识清单(新人教版必修第一册)(教师版).pdf VIP
- 机场集群通信系统.pdf VIP
- 英语背诵美文30篇.pdf VIP
- (第三版)子宫内膜异位症诊治指南解读PPT课件.pptx VIP
- Weichai潍柴动力 柴油机 WP9H WP10H欧Ⅵ系列 维修手册.pdf
原创力文档

文档评论(0)