[英]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)
可能發生的溢出
結合malloc和memset使calloc有機會請求已知已歸零的頁面。
calloc 的一個缺點是組合步驟可能會排除malloc周圍的其他包裝器。
好吧,我在相當多的 C 代碼中使用了calloc
,所以我想這是一個答案。 我認為稍微不尋常的調用方法(元素數量和元素大小)可能會讓人失望。 但是,您可能不會看到如您預期的那么多調用的另一個原因是,許多較大的項目使用malloc
、 calloc
和在內存分配失敗時進行錯誤處理(通常終止程序)的朋友的包裝器。 所以實際代碼使用xcalloc
代替。
使用calloc
不是malloc
加memset
是calloc
可能更有效。 如果 C 庫已經知道某個頁面已清零(也許它剛剛從操作系統獲得了新的清零內存),則不必顯式將其清零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.