c-使用calloc()代替malloc()和memset()有什么好处吗



我想知道calloc()是否比mallocmemset更可取。后者似乎是分配和初始化内存的最常见方式。

github代码搜索会发现许多calloc测试和实现,但在最初的几页中,没有实际使用calloc的代码。

是否有人知道任何使用或建议使用calloc的项目/组织,以及在哪些情况下建议使用?

从下面的评论和答案中,以下是迄今为止出现的一些想法:

  • calloc(n, size)可以防止malloc(n * size) 可能出现的溢出

  • mallocmemset组合,使calloc有机会请求已知已为零的页面。

  • calloc的一个缺点是,组合的步骤可能会排除malloc周围的其他包装器。

好吧,我在很多C代码中使用了calloc,所以我想这是一个答案。我认为稍微不寻常的调用方法(元素数量和元素大小(可能会让人大吃一惊。然而,您可能没有看到预期的那么多调用的另一个原因是,许多较大的项目使用malloccalloc周围的包装器,以及在内存分配失败时进行错误处理(通常终止程序(的朋友。因此实际的代码使用xcalloc

使用calloc而不是malloc加上memset的一个原因是calloc可能更有效。如果C库已经知道页面为零(也许它只是从操作系统获得了新的零内存(,那么它不必显式地将其归零。

相关内容

  • 没有找到相关文章

最新更新