Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更喜欢malloc而不是calloc_C_Malloc_Calloc - Fatal编程技术网

更喜欢malloc而不是calloc

更喜欢malloc而不是calloc,c,malloc,calloc,C,Malloc,Calloc,可能重复: 是否存在您更喜欢malloc而不是calloc的情况。我知道malloc和calloc都是动态分配内存的,calloc还将分配内存中的所有位初始化为零。 从这一点上,我想最好使用calloc而不是malloc。或者在某些情况下malloc更好?性能可能是?如果需要将动态分配的内存初始化为零,请使用calloc 如果不需要对动态分配的内存进行零初始化,则使用malloc 您并不总是需要零初始化内存;如果不需要初始化内存零点,则无需支付初始化成本。例如,如果分配内存,然后立即复制数据以

可能重复:

是否存在您更喜欢malloc而不是calloc的情况。我知道malloc和calloc都是动态分配内存的,calloc还将分配内存中的所有位初始化为零。
从这一点上,我想最好使用calloc而不是malloc。或者在某些情况下malloc更好?性能可能是?

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

如果不需要对动态分配的内存进行零初始化,则使用
malloc

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


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

如果您不小心,依赖calloc的零初始化可能是危险的。归零内存为0表示整数类型,为\0表示字符类型。但它不一定对应于浮点/双0或空指针。

通常分配内存的目的是在那里存储某些内容。这意味着(至少大部分)由
calloc
初始化为零的空间将很快被其他值覆盖。因此,大多数代码使用
malloc
来获得一点额外的速度,而没有实际损失


<> >我几乎看到的唯一的用法是<代码> CaloC是代码(它是)相对于Java C++的java速度基准。在C++版本中,它用<代码> CaloC分配了一些内存,然后使用<代码> MyStuts<代码>,重新初始化内存(在我看来),这是一个相当透明的尝试,试图产生对java有利的结果。

谢谢。性能是一个很好的观点。我还想知道是否还有其他可能的原因。(呃……他们结束了你的问题,这与“重复”略有不同……有时我讨厌S.O。)无论如何,你可能希望使用calloc而不是malloc有几个原因。一是像valgrind这样的程序会向malloc发出许多潜在的虚假警告。另一个与暴露bug有关。使用未初始化的内存可能会导致不稳定的行为,这可能会使您注意到一个错误,如果您使用calloc.Voting重新打开此错误,该错误本会被忽略。另一个问题是关于它们之间的区别。这个问题是不同的。它问人们为什么更喜欢malloc(这是一种常见的做法)。@RaymondHettinger,如果我没记错的话,如果他们的答案相同,那并不重要。