我猜这可能是历史,早于C有功能原型的时代.在没有原型的这些时候,基本上必须有这些论点int
,typedef
size_t
甚至可能还没有发明.但是,INTMAX
你可以分配的最大块,malloc
并将它分成两部分,只是为了给你更多的灵活性,并允许你分配真正大的数组.即使在那个时候有方法来获得,其中默认清零从系统大页,所以效率不是这么多的问题calloc
比malloc
.
如今,随着size_t
手头的功能原型,这只是C的丰富历史的每日提醒.
参数名称很好地记录了它:
void *malloc(size_t size);
void *calloc(size_t nelem, size_t elsize);
Run Code Online (Sandbox Code Playgroud)
后一种形式允许通过提供元素数量和元素大小来整齐地分配数组。通过乘法可以实现相同的行为malloc
。
但是,calloc
还将分配的内存初始化为 0。malloc
没有 init,因此该值未定义。malloc
理论上可以更快,因为没有设置所有内存;只有大量的情况下才可能注意到这一点。
在这个问题中,建议是calloc
clear-alloc,malloc
是mem-alloc。