根据为什么 malloc+memset 比 calloc 慢?
malloc
+memset
比calloc
某些条件下慢。
为什么不calloc
以这样的方式编写它可以接受额外的value
参数( like memset
)来将默认赋值覆盖为零?如果这样做会产生什么影响?
根据为什么 malloc+memset 比 calloc 慢?
malloc
+memset
比calloc
某些条件下慢。
为什么不calloc
以这样的方式编写它可以接受额外的value
参数( like memset
)来将默认赋值覆盖为零?如果这样做会产生什么影响?
这些calloc
或memset
初始化在字节级别上进行操作,因此即使memset
使用不同于 from 的值0
也没有多大用处。至少我不记得它与不同的值一起使用。大多数情况下,您为比char
.
另一个方面是calloc
初始化而不是赋值。平台可能具有提供对所有字节的快速初始化的内置函数0
,当您将参数传递给初始化时,您不会捕捉到这一点。
但可能最重要的方面是这是 C 的历史。这些接口从一开始就起源,不可能改变。
这就是它的设计方式。
主要是每当您分配内存时,您都会立即为其分配值。强制 calloc 初始化一个特定的会产生不必要的开销。例如,您要分配一个包含 100 万个 int 的数组并分配从 1 到 100 万的值。
如果 calloc() 采用如下参数:
int *ptr;
int initValue = 3;
ptr = calloc(NumItems, sizeof(int), initValue);
然后 calloc() 被迫initValue
不必要地初始化所有 100 万个元素。