2012-01-17 72 views
2

由于malloc/calloc是在stdlib中为C定义的旧实现。 有没有什么更好的实现可以替代malloc/calloc? 请不要回答关于malloc/calloc方法的任何包装方法。 在C中分配内存的新实现不应该调用malloc/calloc而不是它应该实现自己的方法。有没有比malloc/calloc更好的实现在C中分配内存?

+2

没有“更好”的质量,只有基准。 – 2012-01-17 10:24:59

+0

你卡在C中吗?或者你也可以使用C++吗?你会有新的关键。但要小心,如果你将malloc/free与new/delete混合使用。这种方法应该做什么样的工作? (例如,是否可以设置最大尺寸数组,是已知的类型...) – Beachwalker 2012-01-17 10:27:29

+5

* malloc是旧的实现*旧的,因此破碎,对吧? – 2012-01-17 10:29:30

回答

1

你试过calloc()功能吗?我从来没有用过它,但有些人有过。

calloc tutorial link

+0

calloc只是malloc,其分配的内存为零 – 2012-01-17 10:56:32

+0

@Paul R.是的,但考虑到原始问题缺乏有用的要求,这很容易被认为是“更好的实现”。 – Roddy 2012-01-17 11:24:47

3

Hoard是“顺便更换为malloc()”,旨在提高内存分配的性能。

此外,dmalloc是另一种“直接替换”,其目的是使内存分配问题更容易调试。

也许这些作品适合你。这有点难以理解为什么你想取代malloc(),因为你没有给出任何理由。

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

囤积内存分配器是一个用于Linux,Solaris和Mac OS X的一个快速,可扩展和内存高效的内存分配,和视窗。 Hoard是malloc的一种替代品,可以显着提高应用程序的性能,特别是对于在多处理器和多核CPU上运行的多线程程序。

Benchmark

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

1

在谷歌的一个快速搜索显示我没有其他C方法来分配内存像malloc一样有效(照顾内存对齐等)。从我看到它非常努力和难以尝试创建你自己的malloc-replacement ...

你可以使用brk()sbrk()但它们不是标准C的一部分,它们只能在Unixy系统上正常工作。 mmap()也值得一看,但它看起来像具有相同的缺点。

1

nedmalloc可以用来代替CRT存储器功能,它也可以注入已编译的应用程序。

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

相关问题