为什么calloc接受两个参数而malloc只有一个?

IMO就足够了,为什么calloc需要将它分成两个参数?

我猜这可能是历史,早于C有function原型的时代。 在没有原型的这些时候,参数基本上必须是inttypedef size_t可能甚至还没有发明。 但是, INTMAX是你可以用malloc分配的最大块,并将它分成两部分,只是为了给你更多的灵活性,并允许你分配真正大的数组。 即使在那个时候,也有一些方法可以从系统中获取大页面,默认情况下将其归零,因此calloc效率与malloc相比并不是一个问题。

如今,随着size_t和手头的函数原型,这只是C的丰富历史的每日提醒。

参数名称合理地记录了它:

 void *malloc(size_t size); void *calloc(size_t nelem, size_t elsize); 

后一种forms允许通过提供元素的数量和元素大小来整齐地分配数组。 使用malloc可以通过相乘来实现相同的行为。

但是, calloc还将分配的内存初始化为0. malloc不执行init,因此值未定义。 理论上, malloc可以更快,因为没有设置所有内存; 这只是大量的注意事项。

在这个问题中 ,建议calloc是clear-alloc, malloc是mem-alloc。