如果我有许多函数需要malloc()小尺寸(通常最多 500 字节),则在完成后释放。会malloc()重新组合相邻的块还是会继续分裂更大的块并导致碎片?
对于这种情况,是使用足够大小的缓冲区更好还是malloc()每次都调用更好?
我对 GNU C 库感兴趣,但有关其他实现的答案也很有用。
小智 5
malloc() 完全依赖于实现。你真的不能“正式”地说任何关于它的事情。
如果你真的很关心它,你总是可以编写一个数据结构来维护一个 500 字节项目的巨大池,你可以从中获取和回馈。所以基本上是针对特定数据类型的特定 malloc 和 free 。这些东西对于具有固定大小对象的系统确实有一点帮助,并且对象的最大数量不会改变太多。例如,具有固定大小节点的树操作。
事实上,与不必考虑这一点的系统相比,malloc() 是通用的并且必须考虑不同的块大小,这总是会给它带来劣势。