c - 为什么 calloc 需要两个参数而 malloc 只需要一个参数?

标签 c memory-management

一直写calloc(1, sizeof(MyStruct)) 对我来说很麻烦。我不想使用包装此方法等的想法。我的意思是我想知道两个参数给我什么?如果它给出了一些东西,为什么 malloc 也没有两个参数?

顺便说一句,我搜索了这个问题的答案,但没有找到真正好的答案。这些答案是 calloc 可以分配比 malloc 更大的 block 等等。

我看到另一个答案是calloc分配一个数组。使用 malloc 我可以相乘,我会得到一个数组,我可以在没有 1, 的情况下使用它。

最佳答案

历史原因。

在引入calloc 时,malloc 函数并不存在,calloc 函数将为一个元素对象。

后来引入 malloc 时,决定返回的内存将正确对齐以供任何使用(这会消耗更多内存),因此只需要一个参数。 calloc 的 API 未更改,但 calloc 现在还返回正确对齐的内存以供任何使用。

编辑:

请参阅评论中的讨论和来自 @JimBalter 的有趣输入.

我关于引入 malloccalloc 的第一个陈述可能是完全错误的。

此外,真正的原因也可能与对齐无关。 C 的历史已经被编译器实现者改变了很多。 malloccalloc 可能来自不同的组/编译器实现者,这可以解释 API 的差异。我实际上赞成这种解释是真正的原因。

关于c - 为什么 calloc 需要两个参数而 malloc 只需要一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555911/

相关文章:

ios - 从 NSMutableStrings 循环填充 NSMutableArray 时应用程序崩溃

c - 该程序编译但在执行时终止。为什么?

C 程序无法读取 .txt 文件中的用户名和密码

c++ - 如何尝试读取未分配的内存

c++ - 要释放动态数组初始化时程序崩溃

c++ - C++ 中内存清理以避免数据泄漏的更好方法?

c++ - 将 C++ 用于性能密集型应用程序?

c - 非标准目录布局中的 makefile

无法让 makefile 生成 gmon.out

memory-management - 什么类型的输入会减慢动态内存分配器 malloc() 和 free() 的执行时间?