calloc 和 malloc 后跟 memset 有什么区别?如果我用 malloc 后跟 memset 替换对 calloc 的所有调用,它会一样吗?
如果是这样,那为什么要分别提供两个函数 malloc 和 calloc 呢?
calloc 和 malloc 后跟 memset 有什么区别?如果我用 malloc 后跟 memset 替换对 calloc 的所有调用,它会一样吗?
如果是这样,那为什么要分别提供两个函数 malloc 和 calloc 呢?
虽然calloc()
总是用零 ( '\0'
) 初始化内存区域,但该memset()
调用允许您选择用哪些字节填充内存。
在速度方面,如果内存需要清零,calloc()
可能会比malloc()
+快;更快地返回未初始化的内存,但它仍然需要额外调用.memset()
malloc()
memset()
基本上,如果您想将内存归零,请使用calloc()
; 如果您想让它保持未初始化状态,请使用malloc()
.
一个重要的区别是,如果溢出,我希望calloc(nmemb, size)
返回。如果您改为使用,则乘法溢出可能会导致您请求的缓冲区比您预期的要小(这可能会导致以后出现安全问题)。因此,如果您打算用电话替换电话,则需要小心。NULL
nmemb * size
malloc(nmemb * size)
calloc
malloc