calloc和malloc跟memset有什么区别?

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

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

如果是这样的话,为什么分别提供了两个函数malloc和calloc?


虽然calloc()总是使用零( '' )初始化内存区域,但memset()调用允许您选择要填充内存的字节。

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

基本上,如果你想清零内存,使用calloc() ; 如果你想让它不被初始化,使用malloc()


一个重要的区别是,如果nmemb * size溢出,我期望calloc(nmemb, size)返回NULL 。 如果你改用malloc(nmemb * size) ,乘法溢出会导致你请求一个比你预期的更小的缓冲区(这可能会导致后面的安全问题)。 因此,如果您打算用malloc替换calloc调用,则需要注意。

链接地址: http://www.djcxy.com/p/28453.html

上一篇: What's the difference between calloc & malloc followed by a memset?

下一篇: malloc and calloc