callocC 中的函数用于分配归零内存,该内存至少可以容纳指定大小的请求数量的元素。在实践中,大多数内存分配器可能会分配更大的块以提高效率并最小化碎片。在此类系统中分配的实际可用块大小通常可通过特殊函数发现,即_msize或malloc_usable_size。
将calloc确保整个可用块归零,还是仅将分配的请求计数 * 大小部分归零?
它只能保证将请求的分配归零。
你永远不应该依赖过度分配。
简短回答:没有更多信息就不可能说,但我不会指望它。
更长的答案:
如果你要求 N 个字节,C 标准保证(除非它失败)calloc会给你 N 个字节,而且它们都是 0。就 C 标准而言,这就是我们所能说的。
如果您有一个 C 库,它 (a) 有时会为您提供超过 N 个字节,并且 (b) 为您提供一种明确定义的方式来找出有多少和 (c) 保证您可以使用这些额外的字节,我们显然不能说这些字节是否保证为 0。C 标准没有告诉我们,我们也不知道您使用的是什么 C 库或它的特殊保证是什么。
由于您的 C 库可能会给您 (a)、(b) 和 (c),因此您将不得不查阅该特定库的文档、源代码和/或作者来回答问题 (d) 是任何额外的内存保证为0?这个问题没有通用的、非图书馆特定的答案。