所谓固定大小块分配 ... ,由于变量块大小导致的碎片化,这些实现可能无法在实时系统中使用,因为会影响性能。
“变量块大小如何导致碎片化”是如何发生的呢?如何通过固定大小的分配来解决这个问题?对我来说,这篇维基百科描述有点误导。我认为碎片化不是通过固定大小的分配避免或由变量大小引起的。在内存池上下文中,通过专门设计用于特定应用程序的内存分配器来避免碎片化,或者通过严格使用预期的内存块来减少碎片化。
此外,通过几个实现示例,例如代码示例1和代码示例2,在我看来,要使用内存池,开发人员必须非常了解数据类型,然后将数据剪切、分割或组织成链接的内存块(如果数据接近于链接列表)或分层链接块(如果数据更具分层结构,如文件)。此外,似乎开发人员必须预测需要多少内存。
嗯,我可以想象这对于原始数据数组很有效。那么对于C++非原始数据类,其中内存模型并不那么明显呢?即使对于原始数据,开发人员是否应该考虑数据类型对齐?
有没有适用于C和C ++的良好内存池库?
感谢任何评论!