IMO 一个就足够了,为什么calloc
需要将它分成两个参数?
问问题
4657 次
2 回答
8
我猜这可能是历史,并且早于 C 具有函数原型的时代。在这些没有原型的时候,论点基本上必须是int
,typedef
size_t
甚至可能还没有发明。但是然后INTMAX
是您可以分配的最大块malloc
并将其分成两部分只会为您提供更大的灵活性并允许您分配非常大的数组。即使在那个时候,也有一些方法可以从系统中获取默认归零的大页面,因此效率问题并不calloc
比 for大malloc
。
如今,有了size_t
函数原型,这只是对 C 语言丰富历史的日常提醒。
于 2011-09-24T07:31:04.627 回答
3
参数名称很好地记录了它:
void *malloc(size_t size);
void *calloc(size_t nelem, size_t elsize);
后一种形式允许通过提供元素数量和元素大小来整齐地分配数组。相同的行为可以用malloc
, 通过乘法来实现。
但是,calloc
也将分配的内存初始化为 0。malloc
不进行初始化,因此该值未定义。malloc
理论上可以更快,因为没有设置所有内存;这只可能会在大量时注意到。
在this question中,建议calloc
是clear-alloc和malloc
mem-alloc。
于 2011-09-24T01:45:44.937 回答