我需要对内存池的概念和实现进行一些说明。
通过wiki上的内存池,它说
也称为固定大小块分配,...,因为这些实现由于块大小可变而遭受碎片,由于性能原因,不可能在实时系统中使用它们。
“可变块大小导致碎片”如何发生?固定大小的分配如何解决这个问题?这个 wiki 描述对我来说听起来有点误导。我认为固定大小的分配或可变大小无法避免碎片。在内存池上下文中,通过为特定应用程序设计的特定内存分配器可以避免碎片,或者通过限制使用预期的内存块来减少碎片。
同样通过几个实现示例,例如Code Sample 1和Code Sample 2,在我看来,要使用内存池,开发人员必须非常了解数据类型,然后将数据切割、拆分或组织到链接的内存中块(如果数据接近链表)或分层链接块(如果数据更分层组织,如文件)。此外,似乎开发人员必须事先预测他需要多少内存。
好吧,我可以想象这对于一组原始数据很有效。内存模型不那么明显的 C++ 非原始数据类呢?即使对于原始数据,开发人员是否应该考虑数据类型对齐?
是否有适用于 C 和 C++ 的良好内存池库?
感谢您的任何评论!