因为malloc / calloc是stdlib中为C定义的旧实现。 有没有更好的实现可以取代malloc / calloc ? 请不要回答malloc / calloc方法的任何包装器方法。 在C中分配内存的新实现不应该调用 malloc / calloc ,而应该实现自己的方法。
答案 0 :(得分:10)
除非您的应用程序是多线程的,否则您可能不应该打扰。 This article suggests (for one platform, at least) that malloc
performs quite competitively in a single threaded environment
那么,您应该在应用程序中使用哪个分配器?对于单线程代码,Solaris OS上的
malloc
被证明是一个很好的选择。
你很难比malloc
或其非常相似的功能做得更好。如果你想要更好的内存分配,你可以包装malloc
或调用操作系统内存分配函数(但丢失可移植性)并将你自己的分配逻辑放在内存块之上。
如果确实需要更好的内存分配器,请尝试Hoard:
Hoard内存分配器是一个快速,可扩展且内存高效的内存分配器,适用于Linux,Solaris,Mac OS X和Windows。 Hoard是malloc的直接替代品,可以显着提高应用程序性能,尤其适用于在多处理器和多核CPU上运行的多线程程序。
请注意it's not necessarily free。如果您想要免费的,请尝试one of these。
答案 1 :(得分:4)
Hoard是malloc()
的“替代品”,旨在提高内存分配性能。
此外,dmalloc是另一个“替代品”,其目的是使内存分配问题更容易调试。
也许其中任何一个都适合你。由于您没有给出任何理由,因此有点难以理解为什么要替换malloc()
。
答案 2 :(得分:1)
您是否尝试使用calloc()
功能?我从未使用它,但有些人曾经使用过它。
答案 3 :(得分:1)
谷歌中的快速搜索向我展示了没有其他C方法像malloc一样有效地分配内存(处理内存对齐等)。从我看到它非常努力和讨厌尝试创建自己的malloc替换...
您可以使用brk()
和sbrk()
,但它们不是标准C的一部分,它们仅适用于Unixy系统。 mmap()
也值得一看,但它看起来有同样的缺点。
答案 4 :(得分:1)