C语言 在 malloc 或调用 calloc 后初始化为零



我在malloc上使用calloc有一点困惑。我记得在我读过的某处读到 calloc 比 malloc 慢,因为 calloc 在执行内存分配后执行初始化为零。

在我正在工作的项目中,我看到在 malloc 之后,他们为所有值分配零,如下所示,

str* strptr = (str*)malloc(sizeof(str));
memset(strptr,0,sizeof(str));

这里str是一个结构。

这类似于

str* strptr =(str*)calloc(1,sizeof(str));

我想知道使用 malloc 而不是 calloc 是否有任何优势,以及哪种方法更受欢迎。

我想知道使用 malloc 而不是 calloc 是否有任何优势

它们之间的区别只是

  • calloc 也采用对象计数,而不是只接受字节计数的malloc
  • calloc零内存; malloc使内存保持未初始化状态

因此,除了归零部分外,没有其他特殊优势。

首选哪种方法。

为什么不按照您正在查看的代码库使用malloc方式呢?避免重复工作和代码;当 API 已经这样做时,为什么要重新发明轮子?您可能已经看到代码库具有一个实用程序函数,该实用程序函数就是这样做的:分配和零内存。这表明该代码段将被多次使用,因此他们将其包装在宏/函数中以从不同位置调用它。但是,当calloc已经这样做时,为什么要这样做呢?

最好的代码是根本没有代码。代码越少越好,因此在这里你应该更喜欢calloc而不是malloc。也许优化器会在下面做同样的事情,但为什么要冒险呢?显然,优化器可能没有那么聪明,这就是这个问题的原因:为什么malloc + memset比calloc慢?

此外,calloc路线需要较少的击键。

相关内容

  • 没有找到相关文章

最新更新