我想知道 calloc()
胜过 malloc
随后 memset
. 后者似乎是分配和初始化内存的最常见方式。
A github代码搜索 屡见不鲜 calloc
测试和实现,但在前多少个页面中,没有实际使用的代码。calloc
.
有谁知道任何项目组织使用或建议使用 calloc
以及在什么情况下推荐它?
从下面的评论和回答中,这里有一些目前出现的想法。
calloc(n, size)
可以防止溢出,是可能与 malloc(n * size)
结合 商场 和 记忆组 给予 呼叫 机会请求一个已知已经归零的页面。
的缺点是 呼叫 的组合步骤可能会排除其他围绕着 商场.
好吧,我用的是 calloc
在相当多的C代码中,所以我想这是一个答案。 我认为稍微不寻常的调用方法(元素的数量和元素的大小)可能会引起人们的注意。 然而,另一个原因是,很多大型项目都使用了围绕着 malloc
, calloc
,以及在内存分配失败时做错误处理(通常是终止程序)的朋友。 所以实际代码中使用了 xcalloc
而不是。
使用 calloc
在...上 malloc
加上 memset
就是 calloc
可能更有效率。 如果C库已经知道某页被清零了(也许是刚从操作系统那里得到了新的清零内存),它就不必显式地将其清零。