使用calloc()而不是malloc()和memset()有什么好处吗?

时间:2013-03-18 00:47:37

标签: c memory-management malloc calloc dynamic-allocation

我想知道calloc()是否优于malloc后跟memset。后者似乎是分配和初始化内存的最常用方式。

github code search引发了许多calloc测试和实施,但在第一页数中没有代码实际使用calloc

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

从下面的评论和答案中,到目前为止已经出现了一些想法:

  • calloc(n, size)可以防止malloc(n * size)

  • 出现溢出
  • 合并 malloc memset 使 calloc 有机会请求已知已归零的页面。

  • calloc 的一个缺点是,合并后的步骤可能会排除围绕 malloc 的其他包装。

1 个答案:

答案 0 :(得分:14)

好吧,我在相当多的C代码中使用calloc,所以我猜这是一个答案。我认为稍微不寻常的调用方法(元素数量和元素大小)可能会引发人们的注意。然而,另一个原因是你可能看不到你想要的那么多的调用是很多大型项目使用malloccalloc和处理错误处理的朋友(通常终止程序)的包装器)关于内存分配失败。因此,实际代码使用xcalloc代替。

calloc优于mallocmemset的一个原因是calloc可能更有效率。如果C库已经知道页面已归零(也许它只是从操作系统获得了新的归零内存),则不必明确将其归零。