是否有任何情况你更喜欢malloc而不是calloc。我知道malloc和calloc都动态分配内存,而calloc也将所有内存中的所有位初始化为零。 从这个我会猜测它总是更好地使用calloc而不是malloc。或者在某些情况下malloc更好?表现可能是?
答案 0 :(得分:21)
如果您需要动态分配的内存进行零初始化,请使用calloc
。
如果您不需要动态分配的内存进行零初始化,请使用malloc
。
您并不总是需要零初始化内存;如果你不需要零初始化的内存,不要支付初始化它的成本。例如,如果您分配内存然后立即复制数据以填充分配的内存,则没有理由执行零初始化。
calloc
和malloc
是执行不同操作的函数:使用最适合您需要完成的任务的函数。
答案 1 :(得分:2)
如果你不小心,依赖calloc的零初始化可能会很危险。归零内存为整数类型提供0,为预期的char类型提供\ 0。但它不一定对应于float / double 0或NULL指针。
答案 2 :(得分:1)
您通常会分配内存,其具体目的是存储内容。这意味着(至少大部分)由calloc
零初始化的空间很快将被其他值覆盖。因此,大多数代码使用malloc
来获得一些额外的速度而没有真正的损失。
我见过calloc
的唯一用途是代码(据说是)对Java相对于C ++的速度进行基准测试。在C ++版本中,它使用calloc
分配了一些内存,然后使用memset
再次初始化内存(对我而言)是一种相当透明的尝试,可以产生有利于Java的结果。