c-最佳贴合度vs隔离贴合度vs好友系统,以减少碎片



我正在使用C中的固定大小数组进行动态内存分配模拟(malloc()和free()),我想知道其中哪一个会产生最少的碎片(内部和外部)?我不在乎速度,能够减少碎片是我想要解决的问题。

对于好友系统,我读到它有很高的内部碎片,因为大多数请求的大小不是2的幂。

对于最佳匹配,我听说的唯一负面影响是它是连续的,所以搜索需要很长时间(在我的情况下不是问题)。在任何情况下,根据我的理解,我都可以使用二叉树进行搜索。我也可以将固定大小的数组一分为二,左边的大小用于较小的块,右边的大小用于较大的块。我不知道还有其他的负面影响。

对于隔离拟合,它类似于好友系统,但我不确定它是否也有同样的碎片化问题,因为它不会以2的幂分裂。

有没有人有一些统计数据,或者从以前使用过这些数据中知道我问题的答案?

控制碎片取决于用例。唯一不会出现碎片的情况是,malloc()函数无论何时调用都会返回一个固定大小的内存块。这更多地涉及内存池。一些高端服务器通常这样做是为了在知道要分配什么以及保持分配的时间后提高性能。

当你开始考虑在通用内存管理器中减少碎片时,你提到的这些简单算法不会有什么好处。有一些复杂的内存管理算法,如jemalloc、tcmalloc和Poul-HenningKamp-malloc,可以处理这类问题。围绕这一点发表了许多白皮书。ACM和IEEE有大量关于这方面的文献。

最新更新