如果我有很多函数调用malloc()
小尺寸(通常最多500字节),那么完成后就可以释放。 malloc()
会重新匹配相邻的块,还是会继续拆分较大的块并造成碎片?
对于这种情况,最好是使用足够大小的缓冲区还是每次都调用malloc()
?
我对GNU C库感兴趣,但有关其他实现的答案也很有用。
答案 0 :(得分:4)
malloc()完全依赖于实现。你真的不能'正式'说出任何关于它的事情。
如果你真的很关心它,你总是可以编写一个数据结构来维护一个由500字节项组成的巨型池,你可以从中获取和交还。所以基本上是一个特定的malloc,并为该特定数据类型免费。对于具有固定大小的对象的系统,这些事情确实有点帮助,并且它们的最大数量不会发生太大变化。例如,对于具有固定大小节点的树操作。
与不必考虑它的系统相比,malloc()是通用的且必须考虑不同块大小的事实总是会给它带来不利。