是否有比malloc / calloc更好的实现在C中分配内存?

时间:2012-01-17 10:22:58

标签: c memory-management malloc

因为malloc / calloc是stdlib中为C定义的旧实现。 有没有更好的实现可以取代malloc / calloc ? 请不要回答malloc / calloc方法的任何包装器方法。 在C中分配内存的新实现不应该调用 malloc / calloc ,而应该实现自己的方法。

5 个答案:

答案 0 :(得分:10)

除非您的应用程序是多线程的,否则您可能不应该打扰。 This article suggests (for one platform, at least) that malloc performs quite competitively in a single threaded environment

  

那么,您应该在应用程序中使用哪个分配器?对于单线程代码,Solaris OS上的malloc被证明是一个很好的选择。

     

Note the first case

     

Note the first case

你很难比malloc或其非常相似的功能做得更好。如果你想要更好的内存分配,你可以包装malloc或调用操作系统内存分配函数(但丢失可移植性)并将你自己的分配逻辑放在内存块之上。

如果确实需要更好的内存分配器,请尝试Hoard

  

Hoard内存分配器是一个快速,可扩展且内存高效的内存分配器,适用于Linux,Solaris,Mac OS X和Windows。 Hoard是malloc的直接替代品,可以显着提高应用程序性能,尤其适用于在多处理器和多核CPU上运行的多线程程序。

     

Benchmark

请注意it's not necessarily free。如果您想要免费的,请尝试one of these

答案 1 :(得分:4)

Hoardmalloc()的“替代品”,旨在提高内存分配性能。

此外,dmalloc是另一个“替代品”,其目的是使内存分配问题更容易调试。

也许其中任何一个都适合你。由于您没有给出任何理由,因此有点难以理解为什么要替换malloc()

答案 2 :(得分:1)

您是否尝试使用calloc()功能?我从未使用它,但有些人曾经使用过它。

calloc tutorial link

答案 3 :(得分:1)

谷歌中的快速搜索向我展示了没有其他C方法像malloc一样有效地分配内存(处理内存对齐等)。从我看到它非常努力和讨厌尝试创建自己的malloc替换...

您可以使用brk()sbrk(),但它们不是标准C的一部分,它们仅适用于Unixy系统。 mmap()也值得一看,但它看起来有同样的缺点。

答案 4 :(得分:1)

nedmalloc可以用作滴水代替CRT记忆功能,它也可以注入已编译的应用程序中。

如果你正在使用glibc,你不应该太担心,它是一个非常好的分配器,基于dlmalloc,他们只有你真正担心这些天的时间是多争用是一个问题的线程分配,在这种情况下你需要nedmalloc,tcmalloc或TBB malloc。