"malloc"和"calloc"分配的内存块的区别。
"malloc"和"calloc"分配的内存块的区别。
这个问题已经有答案了:
可能是重复问题:
c difference between malloc and calloc
虽然calloc将内存分配为块,而malloc是在一个单独的块中分配内存,但它们都能够连续地分配内存,如果遇到障碍,calloc是否能跨越障碍,然后在剩余的堆内存中分配另一个块。我想要这个问题的明确答案。
admin 更改状态以发布 2023年5月22日
这两个函数都在一个连续的块中分配内存。参数的差异并不反映底层分配策略的差异,只是历史上的不一致性而已。
(你可以通过推理得出这个结论。如果 calloc 分配非连续的块,调用者如何知道空洞在哪里,如何跳过它们?调用者只收到一个单一的指针,而不是像访问非连续区域所需的区块链表。)
你可以调用 calloc(n,s)
或 malloc(n*s)
;calloc 为你做乘法,仅此而已。如果需要,你可以将参数切换为 calloc(s,n)
。它分配“s”个大小为“n”的对象的想法只是一个概念上的东西,系统实际上并不跟踪或强制执行它。 calloc(4,1)
等效于 calloc(1,4)
等效于 calloc(2,2)
。
这两者之间唯一有意义的区别是 calloc 设置内存为零。malloc 让它未初始化,所以如果不需要清除内存,它更有效率。