"malloc"和"calloc"分配的内存块的区别。

22 浏览
0 Comments

"malloc"和"calloc"分配的内存块的区别。

这个问题已经有答案了:

可能是重复问题:

c difference between malloc and calloc

虽然calloc将内存分配为块,而malloc是在一个单独的块中分配内存,但它们都能够连续地分配内存,如果遇到障碍,calloc是否能跨越障碍,然后在剩余的堆内存中分配另一个块。我想要这个问题的明确答案。

admin 更改状态以发布 2023年5月22日
0
0 Comments

正如John所说,这种差异存在是出于历史原因,并且在分配策略方面没有实际差别。然而,值得指出的一点差异是,calloc分配的内存将被设置为零,而malloc返回指向未初始化内存的指针。

0
0 Comments

这两个函数都在一个连续的块中分配内存。参数的差异并不反映底层分配策略的差异,只是历史上的不一致性而已。

(你可以通过推理得出这个结论。如果 calloc 分配非连续的块,调用者如何知道空洞在哪里,如何跳过它们?调用者只收到一个单一的指针,而不是像访问非连续区域所需的区块链表。)

你可以调用 calloc(n,s)malloc(n*s);calloc 为你做乘法,仅此而已。如果需要,你可以将参数切换为 calloc(s,n)。它分配“s”个大小为“n”的对象的想法只是一个概念上的东西,系统实际上并不跟踪或强制执行它。 calloc(4,1) 等效于 calloc(1,4) 等效于 calloc(2,2)

这两者之间唯一有意义的区别是 calloc 设置内存为零。malloc 让它未初始化,所以如果不需要清除内存,它更有效率。

0