对我来说,一直写作都很麻烦。我不想用包装这个方法之类的方法。我是说我想知道两个参数给了我什么?如果它给出了一些东西,为什么calloc(1, sizeof(MyStruct))没有两个参数呢?
顺便说一句,我在寻找这个问题的答案,但没有找到一个真正好的答案。这些答案是malloc可以分配比calloccan等更大的块。
我看到另一个malloc分配数组的答案。使用calloc我可以进行乘法运算,得到一个数组,在开始时不需要malloc就可以使用它。

最佳答案

历史原因。
在引入calloc时,malloc函数不存在,calloc函数将为一个元素对象提供正确的对齐方式。
当随后引入malloc时,决定返回的内存将正确对齐以供任何使用(这需要更多内存),因此只需要一个参数。calloc的api没有更改,但现在calloc也返回了为任何使用而正确对齐的内存。
编辑:
请参阅评论中的讨论和@JimBalter中有趣的输入。
我关于引入malloccalloc的第一个声明可能是完全错误的。
另外,真正的原因也可能与结盟完全无关。编译器实现者改变了C历史。malloccalloc可能来自不同的组/编译器实现者,这将解释api的差异。事实上,我赞成这种解释作为真正的原因。

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

10-11 23:03