8

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

4

2 回答 2

8

我猜这可能是历史,并且早于 C 具有函数原型的时代。在这些没有原型的时候,论点基本上必须是inttypedef 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和mallocmem-alloc。

于 2011-09-24T01:45:44.937 回答