calloc&的区别是什么? malloc后跟一个memset?

时间:2012-05-22 05:55:09

标签: c malloc calloc

  

可能重复:
  c difference between malloc and calloc
  why malloc+memset slower than calloc?

calloc& amp;的区别是什么? malloc后跟一个memset?如果我用malloc替换所有对calloc的调用,后跟memset,它会是一样吗?

如果是这种情况,那么为什么两个函数malloc& calloc单独提供?

2 个答案:

答案 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次呼叫,则必须小心谨慎。