malloc / calloc分配的块的差异

时间:2012-10-17 18:55:56

标签: c

  

可能重复:
  c difference between malloc and calloc

虽然calloc在一个块中以块和malloc的形式分配内存,但它们是否连续分配内存,如果有障碍,calloc能够跳过障碍物然后在剩余的堆内存中分配另一个块。我希望澄清此事。

2 个答案:

答案 0 :(得分:8)

两个函数都在一个连续的块中分配内存。参数的差异并不反映基础分配策略的差异。这是一个历史的不一致,仅此而已。

(你可以推断出这个结论。如果calloc分配非连续的块,调用者将如何知道这些洞的位置以及如何跳过它们?所有调用者都接收到的是一个指针。不是,比如,一个链接的列表,这是访问非连续区域所需要的。)

您可以致电calloc(n,s)malloc(n*s); calloc为你做乘法,就是这样。如果需要,可以将参数切换为calloc(s,n)。它分配大小为“n”的“s”对象的想法只是一个概念性的,系统实际上并没有跟踪它或强制执行它。 calloc(4,1)相当于calloc(1,4)相当于calloc(2,2)

两者之间唯一有意义的区别是calloc将内存设置为零。 malloc使它保持未初始化状态,因此如果您不需要清除内存,它会更有效。

答案 1 :(得分:1)

正如John所说,由于历史原因存在差异,并且分配策略没有实际差异。但值得指出的一个区别是,calloc ed内存将设置为零,而malloc则返回指向未初始化内存的指针。

相关问题