2

可能重复:
c malloc 和 calloc 之间的区别
为什么 malloc+memset 比 calloc 慢?

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

如果是这样,那为什么要分别提供两个函数 malloc 和 calloc 呢?

4

2 回答 2

13

虽然calloc()总是用零 ( '\0') 初始化内存区域,但该memset()调用允许您选择用哪些字节填充内存。

在速度方面,如果内存需要清零,calloc()可能会比malloc()+快;更快地返回未初始化的内存,但它仍然需要额外调用.memset()malloc()memset()

基本上,如果您想将内存归零,请使用calloc(); 如果您想让它保持未初始化状态,请使用malloc().

于 2012-05-22T06:01:16.133 回答
3

一个重要的区别是,如果溢出,我希望calloc(nmemb, size)返回。如果您改为使用,则乘法溢出可能会导致您请求的缓冲区比您预期的要小(这可能会导致以后出现安全问题)。因此,如果您打算用电话替换电话,则需要小心。NULLnmemb * sizemalloc(nmemb * size)callocmalloc

于 2012-05-22T06:54:25.780 回答