IMO就足够了,为什么calloc
需要将它分成两个参数?
答案 0 :(得分:7)
我猜这可能是历史,并且早于C拥有功能原型的时代。在没有原型的这些时候,参数基本上必须是int
,typedef
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。