簡體   English   中英

使用 calloc() 代替 malloc() 和 memset() 有什么好處嗎?

[英]Are there any advantages to using calloc() instead of a malloc() and memset()?

我想知道calloc()是否比malloc后跟memset更可取。 后者似乎是分配和初始化內存的最常見方式。

github 代碼搜索出現了許多calloc測試和實現,但在第一頁中沒有實際使用calloc代碼。

是否有人知道使用或推薦使用calloc的任何項目/組織以及推薦它的情況?

從下面的評論和答案中,以下是迄今為止出現的一些想法:

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

  • 結合mallocmemset使calloc有機會請求已知已歸零的頁面。

  • calloc 的一個缺點是組合步驟可能會排除malloc周圍的其他包裝器。

好吧,我在相當多的 C 代碼中使用了calloc ,所以我想這是一個答案。 我認為稍微不尋常的調用方法(元素數量和元素大小)可能會讓人失望。 但是,您可能不會看到如您預期的那么多調用的另一個原因是,許多較大的項目使用malloccalloc和在內存分配失敗時進行錯誤處理(通常終止程序)的朋友的包裝器。 所以實際代碼使用xcalloc代替。

使用calloc不是mallocmemsetcalloc可能更有效。 如果 C 庫已經知道某個頁面已清零(也許它剛剛從操作系統獲得了新的清零內存),則不必顯式將其清零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM