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