首页 文章

calloc和malloc之间有什么区别,后面跟着一个memset? [重复]

提问于
浏览
2

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

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

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

2 回答

  • 12

    虽然 calloc() 始终使用零( '\0' )初始化内存区域,但 memset() 调用允许您选择填充内存的字节 .

    就速度而言,如果需要将存储器清零, calloc() 可能会快于 malloc() memset() ; malloc() 更快地返回未初始化的内存,但仍需要额外调用 memset() .

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

  • 3

    一个重要的区别是,如果 nmemb * size 溢出,我希望 calloc(nmemb, size) 返回 NULL . 如果您改为使用 malloc(nmemb * size) ,则乘法溢出会导致您请求比预期更小的缓冲区(这可能会导致以后出现安全问题) . 因此,如果您计划用 malloc 替换 calloc 次呼叫,则需要注意一些事项 .

相关问题