首页 > 解决方案 > calloc 是否将整个分配归零?

问题描述

C 中的calloc函数用于分配归零内存,该内存至少能够保存请求数量的指定大小的元素。在实践中,大多数内存分配器可能会分配更大的块以提高效率并最大限度地减少碎片。在这样的系统中分配的实际可用块大小通常可以通过特殊函数来发现,即_msizemalloc_usable_size

calloc确保整个可用块归零,还是仅将分配的请求计数*大小部分归零?

标签: cmalloccalloc

解决方案


简短的回答:没有更多信息是不可能的,但我不会指望它。

更长的答案:

如果您要求 N 个字节,C 标准保证(除非它失败)calloc会给您 N 个字节,并且它们都将为 0。就 C 标准而言,这就是我们所能说的。

如果你有一个 C 库,(a) 有时会给你超过 N 个字节,(b) 给你一个明确定义的方法来找出多少,(c) 保证你可以使用这些额外的字节,我们显然不能说这些字节是否保证为0。C 标准没有告诉我们,我们也不知道您使用的是什么 C 库或它的特殊保证是什么。

由于您的 C 库可能会为您提供 (a)、(b) 和 (c),因此您将不得不查阅该特定库的文档、源代码和/或作者来回答问题 (d) 是任何额外的内存保证为0?这个问题没有通用的、非图书馆特有的答案。


推荐阅读