内存池实现原理+(中文).doc

内存池实现原理+(中文).doc

ID:55561725

大小:177.00 KB

页数:26页

时间:2020-05-17

内存池实现原理+(中文).doc_第1页
内存池实现原理+(中文).doc_第2页
内存池实现原理+(中文).doc_第3页
内存池实现原理+(中文).doc_第4页
内存池实现原理+(中文).doc_第5页
资源描述:

《内存池实现原理+(中文).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、developerWorks图书频道:C++应用程序性能优化,第6章:内存池级别:中级冯宏华,高级软件工程师,IBM中国开发中心徐莹,开发经理,IBM中国软件开发中心程远,高级软件工程师,IBM软件开发中心汪磊,高级软件工程师,IBM中国开发中心2007年11月29日本书主要针对的是C++程序的性能优化,深入介绍C++程序性能优化的方法和实例。全书由4个篇组成,第1篇介绍C++语言的对象模型,该篇是优化C++程序的基础;第2篇主要针对如何优化C++程序的内存使用;第3篇介绍如何优化程序的启动性能;第4篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和I/O检

2、测工具,它们是测量程序性能的利器。本章首先简单介绍自定义内存池性能优化的原理,然后列举软件开发中常用的内存池的不同类型,并给出具体实现的实例。在此我们推出了本书的前言和第2、6章供大家在线浏览。更多推荐书籍请访问developerWorks图书频道。引言本书主要针对的是C++程序的性能优化,深入介绍C++程序性能优化的方法和实例。全书由4个篇组成,第1篇介绍C++语言的对象模型,该篇是优化C++程序的基础;第2篇主要针对如何优化C++程序的内存使用;第3篇介绍如何优化程序的启动性能;第4篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和I/O检测工具,它们是

3、测量程序性能的利器。本章首先简单介绍自定义内存池性能优化的原理,然后列举软件开发中常用的内存池的不同类型,并给出具体实现的实例。回页首6.1自定义内存池性能优化的原理如前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者删除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内存空间。6.1.1默认内存管理函数的不足利用默认的内存管理函数new/delete或malloc/free在堆上分配

4、和释放内存会有一些额外的开销。系统在接收到分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或者分配最适于申请大小的内存块,或者分配最大空闲的内存块等)找到合适大小的空闲内存块。如果该空闲内存块过大,还需要切割成已分配的部分和较小的空闲块。然后系统更新内存空闲块表,完成一次内存分配。类似地,在释放内存时,系统把释放的内存块重新加入到空闲内存块表中。如果有可能的话,可以把相邻的空闲块合并成较大的空闲块。默认的内存管理函数还考虑到多线程的应用,需要在每次分配和释放内存时加锁,同样增加了开

5、销。可见,如果应用程序频繁地在堆上分配和释放内存,则会导致性能的损失。并且会使系统中出现大量的内存碎片,降低内存的利用率。默认的分配和释放内存算法自然也考虑了性能,然而这些内存管理算法的通用版本为了应付更复杂、更广泛的情况,需要做更多的额外工作。而对于某一个具体的应用程序来说,适合自身特定的内存分配释放模式的自定义内存池则可以获得更好的性能。6.1.2内存池的定义和分类自定义内存池的思想通过这个"池"字表露无疑,应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大

6、小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌控之中。应用程序自定义的内存池根据不同的适用场景又有不同的类型。从线程安全的角度来分,内存池可以分为单线程内存池和多线程内存池。单线程内存池整个生命周期只被一个线程使用,因而不需要考虑互斥访问的问题;多线程内存池有可能被多个线程共享,因此则需要在每次分配和释放内存时加锁。相对而言,单线程内存池性能更高,而多线程内存池适用范围更广。从内存池可分配内存单元大小来分,可以分为固定内存池和可变内存池。所谓固定内存池是指应用程序每次从内存池中分配出来的内存单元大小事先已经确定,是固定不

7、变的;而可变内存池则每次分配的内存单元大小可以按需变化,应用范围更广,而性能比固定内存池要低。6.1.3内存池工作原理示例下面以固定内存池为例说明内存池的工作原理,如图6-1所示。图6-1固定内存池固定内存池由一系列固定大小的内存块组成,每一个内存块又包含了固定数量和大小的内存单元。如图6-1所示,该内存池一共包含4个内存块。在内存池初次生成时,只向系统申请了一个内存块,返回的指针作为整个内存池的头指针。之后随着应用程序对内存的不断需求,内存池判断需要动态扩大时,才再次向系统申请新的内存块,并把所有这些内存块通过指针链接起来。对于操作系统来说,它已经为该应用程序分

8、配了4个等

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。