10

可能重复:
c malloc 和 calloc 之间的区别

在任何情况下,您更喜欢 malloc 而不是 calloc。我知道 malloc 和 calloc 都动态分配内存,并且 calloc 还将分配的内存中的所有位初始化为零。由此我猜想使用calloc而不是malloc总是更好。还是在某些情况下 malloc 更好?性能可能是?

4

3 回答 3

22

如果您需要将动态分配的内存进行零初始化,请使用calloc.

如果您不需要将动态分配的内存进行零初始化,请使用malloc.

您并不总是需要零初始化的内存;如果您不需要对内存进行零初始化,则无需支付初始化成本。例如,如果您分配内存然后立即复制数据以填充分配的内存,则没有任何理由执行零初始化。

calloc并且malloc是做不同事情的函数:使用最适合您需要完成的任务的函数。

于 2010-11-22T05:19:46.577 回答
2

如果您不小心,依赖 calloc 的零初始化可能会很危险。归零内存按预期为整数类型提供 0,为 char 类型提供 \0。但它不一定对应于 float/double 0 或 NULL 指针。

于 2010-11-22T05:31:28.787 回答
1

您通常分配内存的特定目的是在其中存储一些东西。这意味着(至少大部分)零初始化的空间calloc将很快被其他值覆盖。因此,大多数代码使用malloc一点额外的速度而没有真正的损失。

我见过的几乎唯一的用途calloc是(据说)对 Java 相对于 C++ 的速度进行基准测试的代码。在 C++ 版本中,它用 分配了一些内存calloc,然后用于memset再次初始化内存(在我看来),这是一种相当透明的尝试,以产生有利于 Java 的结果。

于 2010-11-22T05:32:09.327 回答