为什么calloc不打算分配任意值?

时间:2013-05-14 06:45:24

标签: c dynamic-allocation memset calloc

根据Why malloc+memset is slower than calloc?

在某些条件下,

malloc + memsetcalloc慢。

为什么calloc没有以这样的方式编写,它可以采用额外的value参数(如memset)来覆盖默认赋值为零?如果这样做会产生什么影响呢?

2 个答案:

答案 0 :(得分:2)

这些callocmemset初始化在字节级别上运行,因此即使memset的值不同于0也不是那么有用。至少我不记得它使用不同的值。大多数情况下,您为宽度超过char的基本类型分配内存。

另一方面是calloc是初始化而不是赋值。平台可能有内置函数,可以快速初始化所有字节到0,在传递参数进行初始化时,你不会捕获它。

但可能最重要的方面是这是C的历史。这些界面起源于一开始,无法改变。

答案 1 :(得分:1)

这就是它的设计方式。

主要是在分配内存时,您会立即为其分配值。强制calloc初始化一个特定的东西会产生不必要的开销。例如,您希望分配一个100万个int的数组,并分配1到100万的值。

如果calloc()采取类似的参数:

int *ptr;
int initValue = 3;

ptr = calloc(NumItems, sizeof(int), initValue);

然后calloc()被迫不必要地将initValue初始化为所有100万个元素。