c - calloc 是否将整个分配归零?
问题描述
C 中的calloc
函数用于分配归零内存,该内存至少能够保存请求数量的指定大小的元素。在实践中,大多数内存分配器可能会分配更大的块以提高效率并最大限度地减少碎片。在这样的系统中分配的实际可用块大小通常可以通过特殊函数来发现,即_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?这个问题没有通用的、非图书馆特有的答案。
推荐阅读
- python - 寻求帮助以循环浏览网页
- php - 从日期获取月份和年份
- javascript - 打字稿地图,如数据结构,用于高效检索
- shell - 更宽的 hexdump 输出
- python - 以编程方式确定 Python 的 re.match 停止匹配的位置
- c - 如何使用数字 1、2、3、4 生成随机 5 位数字并将这些生成的数字存储在 C 语言中的数组中
- javascript - 开玩笑 - TypeError:response.json 不是函数
- python - 如何使用递归在最小零钱问题中输出实际的硬币组合
- regex - 非捕获组
- python - argparse:如何允许单个参数使用多个名称?