可能重複:
c difference between malloc and calloc
why malloc+memset slower than calloc?calloc和malloc跟memset有什麼區別?
什麼是後跟一個memset的釋放calloc & malloc的區別?如果我用malloc和memset替換calloc中的所有調用,它會一樣嗎?
如果是這樣的話,爲什麼calloc單獨提供了兩個函數malloc &?
可能重複:
c difference between malloc and calloc
why malloc+memset slower than calloc?calloc和malloc跟memset有什麼區別?
什麼是後跟一個memset的釋放calloc & malloc的區別?如果我用malloc和memset替換calloc中的所有調用,它會一樣嗎?
如果是這樣的話,爲什麼calloc單獨提供了兩個函數malloc &?
雖然calloc()
始終使用零初始化存儲區('\0'
),但memset()
調用允許您選擇用哪些字節填充內存。
在速度方面,如果內存需要清零,calloc()
可能會比malloc()
+ memset()
更快; malloc()
可以更快地返回未初始化的內存,但仍需要額外撥打memset()
。
基本上,如果要將內存清零,請使用calloc()
;如果您想讓它初始化,請使用malloc()
。
+1現在得到它:) – verisimilitude
你絕對是r8 :) – Addicted
一個重要的區別是,如果nmemb * size
溢出,我期望calloc(nmemb, size)
返回NULL
。如果您改爲使用malloc(nmemb * size)
,乘法溢出會導致您請求比您預期的更小的緩衝區(這可能會導致稍後的安全問題)。因此,如果您打算用malloc
替換calloc
來電,那麼需要注意一些問題。
http://stackoverflow.com/questions/2688466/why-mallocmemset-slower-than-calloc – cnicutar
有在互聯網很多很多的答案,在這裏 – theWalker
參考http://stackoverflow.com/questions/2605476/calloc -vs-malloc-and-time-efficiency和http://stackoverflow.com/questions/1538420/c-difference-between-malloc-and-calloc – verisimilitude