对我来说,一直写作都很麻烦。我不想用包装这个方法之类的方法。我是说我想知道两个参数给了我什么?如果它给出了一些东西,为什么calloc(1, sizeof(MyStruct))
没有两个参数呢?
顺便说一句,我在寻找这个问题的答案,但没有找到一个真正好的答案。这些答案是malloc
可以分配比calloc
can等更大的块。
我看到另一个malloc
分配数组的答案。使用calloc
我可以进行乘法运算,得到一个数组,在开始时不需要malloc
就可以使用它。
最佳答案
历史原因。
在引入calloc
时,malloc
函数不存在,calloc
函数将为一个元素对象提供正确的对齐方式。
当随后引入malloc
时,决定返回的内存将正确对齐以供任何使用(这需要更多内存),因此只需要一个参数。calloc
的api没有更改,但现在calloc
也返回了为任何使用而正确对齐的内存。
编辑:
请参阅评论中的讨论和@JimBalter中有趣的输入。
我关于引入malloc
和calloc
的第一个声明可能是完全错误的。
另外,真正的原因也可能与结盟完全无关。编译器实现者改变了C历史。malloc
和calloc
可能来自不同的组/编译器实现者,这将解释api的差异。事实上,我赞成这种解释作为真正的原因。
关于c - 为什么calloc需要两个参数,而malloc仅一个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12555911/