c语言 - calloc & malloc 后跟一个 memset 有什么区别?



可能的重复项:
c Malloc 和 Calloc
之间的区别 为什么 Malloc+Memset 比 Calloc 慢?

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

如果是这样的话,那么为什么malloc和calloc两个功能是分开提供的呢?

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

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

基本上,如果要将内存清零,请使用calloc();如果要使其保持未初始化状态,请使用malloc()

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

最新更新