0

根据为什么 malloc+memset 比 calloc 慢?

malloc+memsetcalloc某些条件下慢。

为什么不calloc以这样的方式编写它可以接受额外的value参数( like memset)来将默认赋值覆盖为零?如果这样做会产生什么影响?

4

2 回答 2

2

这些callocmemset初始化在字节级别上进行操作,因此即使memset使用不同于 from 的值0也没有多大用处。至少我不记得它与不同的值一起使用。大多数情况下,您为比char.

另一个方面是calloc初始化而不是赋值。平台可能具有提供对所有字节的快速初始化的内置函数0,当您将参数传递给初始化时,您不会捕捉到这一点。

但可能最重要的方面是这是 C 的历史。这些接口从一开始就起源,不可能改变。

于 2013-05-14T06:58:03.167 回答
1

这就是它的设计方式。

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

如果 calloc() 采用如下参数:

int *ptr;
int initValue = 3;

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

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

于 2013-05-14T06:52:38.913 回答