更喜欢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,如果我没记错的话,如果他们的答案相同,那并不重要。