根据Why malloc+memset is slower than calloc?
在某些条件下, malloc
+ memset
比calloc
慢。
为什么calloc
没有以这样的方式编写,它可以采用额外的value
参数(如memset
)来覆盖默认赋值为零?如果这样做会产生什么影响呢?
答案 0 :(得分:2)
这些calloc
或memset
初始化在字节级别上运行,因此即使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万个元素。