2013-03-18 94 views
9

我想知道calloc()是否优于malloc,然后是memset。后者似乎是分配和初始化内存的最常见方式。使用calloc()而不是malloc()和memset()有什么好处吗?

A github code search变成了很多calloc测试和实现,但在第一页的数量没有代码实际使用calloc

有谁知道任何项目/组织使用或推荐使用calloc和推荐它的情况?

从意见和下面的答案,这里是一些有想法浮现至今:

  • calloc(n, size)可以防止溢出这是可能与malloc(n * size)

  • 结合的mallocmemset的calloc一个机会来请求一个已知已被归零的页面。

  • 一个缺点释放calloc,该组合步骤可以排除周围的malloc其他包装。

+2

从来不知道任何人使用它,我从来没有使用它,或者知道它的存在。我不知道为什么,但它只是不觉得像C. – Dave 2013-03-18 00:51:06

+5

请注意,'malloc()'后面跟'memset()'实际上保证比'calloc()'慢。 – 2013-03-18 00:58:50

+0

如果您在GitHub上搜索'malloc',您还可以在找到使用之前找到实现和测试代码。 – 2013-03-18 01:03:19

回答

14

那么,我使用calloc在相当多的C代码,所以我想这是一个答案。我认为稍微不寻常的调用方法(元素的数量和元素的大小)可能会引发人们的注意。但是,另一个原因可能导致您看不到多次调用,这是因为很多大型项目都使用围绕malloccalloc和朋友的内容,这些人在内存分配失败时执行错误处理(通常会终止程序)。所以实际的代码使用xcalloc来代替。

使用calloc超过malloc加上memset的一个原因是calloc可能更有效。如果C库已经知道一个页面被清零(也许它只是从操作系统获得了新的归零内存),那么它不必显式地将其归零。

相关问题