我想知道calloc()
是否优于malloc
后跟memset
。后者似乎是分配和初始化内存的最常用方式。
github code search引发了许多calloc
测试和实施,但在第一页数中没有代码实际使用calloc
。
有谁知道使用或推荐使用calloc
的任何项目/组织以及推荐它的情况?
从下面的评论和答案中,到目前为止已经出现了一些想法:
calloc(n, size)
可以防止malloc(n * size)
合并 malloc 和 memset 使 calloc 有机会请求已知已归零的页面。
calloc 的一个缺点是,合并后的步骤可能会排除围绕 malloc 的其他包装。
答案 0 :(得分:14)
好吧,我在相当多的C代码中使用calloc
,所以我猜这是一个答案。我认为稍微不寻常的调用方法(元素数量和元素大小)可能会引发人们的注意。然而,另一个原因是你可能看不到你想要的那么多的调用是很多大型项目使用malloc
,calloc
和处理错误处理的朋友(通常终止程序)的包装器)关于内存分配失败。因此,实际代码使用xcalloc
代替。
calloc
优于malloc
加memset
的一个原因是calloc
可能更有效率。如果C库已经知道页面已归零(也许它只是从操作系统获得了新的归零内存),则不必明确将其归零。