gpt4 book ai didi

c - calloc 的两个参数

转载 作者:太空狗 更新时间:2023-10-29 16:23:53 26 4
gpt4 key购买 nike

为什么 calloc 接受两个参数而不是像 malloc 那样接受一个参数?

具体来说,由于以下表达式之间没有区别(或存在区别?):

calloc (a, b);
calloc (b, a);
calloc (a * b, 1);
calloc (1, a * b);

为什么不只接受要分配的字节总数?这个界面背后的基本原理是什么?为什么这不适用于 malloc?

最佳答案

关于为什么它有两个参数,我听到了两个 [互斥] 的解释:

  1. calloc 负责检查乘法溢出。如果请求 block 的总大小太大(如溢出 size_t),calloc 返回空指针以指示失败。使用 malloc 时,您必须自己观察溢出,而许多人只是忘记这样做。 (尽管标准库的历史知道忽略溢出的 calloc 实现示例,因此无法正常工作)。

  2. calloc 实际上允许分配比 size_t 类型范围更大的内存块,即 calloc 可能能够执行其参数的适当的非溢出大乘法并分配结果大小的 block 。出于这个原因,由于 calloc 使用两个 size_t 类型的参数,它可以分配比 malloc 更大的 block (因为 >malloc 只接受一个 size_t 类型的参数。

我一直相信第一个解释是正确的。但是,在阅读了 SO 上的一些帖子后,我产生了疑问。

关于c - calloc 的两个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4083916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com