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

时间:2011-09-24 01:41:42

标签: c calloc

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

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

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

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

this question中,建议calloc为clear-alloc,malloc为mem-alloc。