可能重复:
c difference between malloc and calloc
why malloc+memset slower than calloc?
calloc& amp;的区别是什么? malloc后跟一个memset?如果我用malloc替换所有对calloc的调用,后跟memset,它会是一样吗?
如果是这种情况,那么为什么两个函数malloc& calloc单独提供?
答案 0 :(得分:12)
虽然calloc()
总是用零('\0'
)初始化内存区域,但memset()
调用允许您选择用内存填充的字节。
就速度而言,如果需要将内存清零,calloc()
可能会比malloc()
+ memset()
更快; malloc()
更快地返回未初始化的内存,但仍需要额外调用memset()
。
基本上,如果要将内存清零,请使用calloc()
;如果您想要保持未初始化状态,请使用malloc()
。
答案 1 :(得分:3)
一个重要的区别是,如果calloc(nmemb, size)
溢出,我希望NULL
返回nmemb * size
。如果改为使用malloc(nmemb * size)
,则乘法溢出会导致您请求比预期更小的缓冲区(这可能会导致以后出现安全问题)。因此,如果您计划将calloc
次呼叫替换为malloc
次呼叫,则必须小心谨慎。