4

如果我有许多需要malloc()小尺寸(通常最多 500 字节)的函数,则在完成后释放。会malloc()重新组合相邻的块还是会继续分裂更大的块并导致碎片?

对于这种情况,是使用足够大小的缓冲区还是malloc()每次都调用更好?

我对 GNU C 库很感兴趣,但有关其他实现的答案也很有用。

4

1 回答 1

4

malloc() 完全依赖于实现。你真的不能“正式”说什么。

如果你真的很关心它,你总是可以编写一个数据结构来维护一个由 500 字节项目组成的巨大池,你可以从中获取和回馈。所以基本上是一个特定的 malloc 并且对于该特定数据类型是免费的。这些东西确实对具有固定大小对象的系统有所帮助,并且它们的最大数量不会改变太多。例如在具有固定大小节点的树操作上。

与不必考虑这一点的系统相比,malloc() 是通用的并且必须考虑不同的块大小这一事实总是会给它带来不利影响。

于 2013-10-23T06:33:44.410 回答