内存池
此条目没有列出任何参考或来源。 (2010年2月7日) |
内存池(Memory Pool),又被称为固定大小区块规划(fixed-size-blocks allocation),允许程序员以类似 C语言 的 malloc 或是 C++ 的 new 操作数进行动态的存储器规划。对于其它动态存储器规划的实践来说,因为会变动存储器区块大小导致的碎片问题,导致在实时系统上受限于性能因此,根本无法使用。内存池提供了一个更有效率的解决方案:预先规划一定数量的存储器区块,使得整个程序可以在执行期规划 (allocate)、使用 (access)、归还 (free) 存储器区块。
有许多实时操作系统采用了内存池,IBM 的 Transaction Processing Facility 便是其中一个例子。
示例
这个简单的内存池实践模块在编译期规划 3 个示例内存池,其区块将大小针对程序的需求做优化。这个程序可以下列接口来规划、使用及归还存储器区块:
内存池与 malloc 的比较
优点
- 内存池允许在执行期以常量时间规划存储器区块,并且不会有存储器破碎的情况产生。一次归还存储器中成千上万个物件的存储器区块只需要一个操作,无需像 malloc 一般需要个别 free。
- 内存池可以在层次结构式的树状结构中被分群,非常适合某些特定的程序结构,例如递归与迭代。
- 固定区块大小的内存池不需将每次规划的资讯记录下来(例如规划的存储器区块大小,因为每次规划都是一样的)。针对一些小而多的存储器区块规划会节省一些空间。
缺点
- 内存池模块在使用时,必须依照程序需求来做个别调整,才能保持时间与空间效率。