9

我想知道是否calloc()比 amalloc后跟 a更可取memset。后者似乎是分配和初始化内存的最常见方式。

github 代码搜索出现了许多calloc测试和实现,但在前几页中没有代码实际使用calloc.

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

从下面的评论和答案中,以下是迄今为止出现的一些想法:

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

  • 结合mallocmemset使calloc有机会请求已知已清零的页面。

  • calloc的一个缺点是组合步骤可能会排除malloc周围的其他包装器。

4

1 回答 1

15

好吧,我calloc在相当多的 C 代码中使用,所以我想这是一个答案。我认为稍微不寻常的调用方法(元素的数量和元素的大小)可能会让人失望。但是,您可能没有看到预期的那么多调用的另一个原因是,许多较大的项目使用包装器malloccalloc以及在内存分配失败时执行错误处理(通常终止程序)的朋友。所以实际的代码xcalloc改为使用。

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

于 2013-03-18T00:53:40.657 回答