一直写calloc(1, sizeof(MyStruct))
对我来说很麻烦。我不想使用包装此方法等的想法。我的意思是我想知道两个参数给我什么?如果它给出了一些东西,为什么 malloc
也没有两个参数?
顺便说一句,我搜索了这个问题的答案,但没有找到真正好的答案。这些答案是 calloc
可以分配比 malloc
更大的 block 等等。
我看到另一个答案是calloc
分配一个数组。使用 malloc
我可以相乘,我会得到一个数组,我可以在没有 1,
的情况下使用它。
最佳答案
历史原因。
在引入calloc
时,malloc
函数并不存在,calloc
函数将为一个元素对象。
后来引入 malloc
时,决定返回的内存将正确对齐以供任何使用(这会消耗更多内存),因此只需要一个参数。 calloc
的 API 未更改,但 calloc
现在还返回正确对齐的内存以供任何使用。
编辑:
请参阅评论中的讨论和来自 @JimBalter 的有趣输入.
我关于引入 malloc
和 calloc
的第一个陈述可能是完全错误的。
此外,真正的原因也可能与对齐无关。 C 的历史已经被编译器实现者改变了很多。 malloc
和 calloc
可能来自不同的组/编译器实现者,这可以解释 API 的差异。我实际上赞成这种解释是真正的原因。
关于c - 为什么 calloc 需要两个参数而 malloc 只需要一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555911/