把 malloc 放在死循環(huán)里面,會是什么樣的現(xiàn)象?
比如這樣的代碼,每次使用 malloc 申請 1M 大小的內(nèi)存,其他什么操作也不做。
理論上來說,堆內(nèi)存是有限的,如果不停的申請,遲早內(nèi)存會被用完,程序應(yīng)該會異常退出。
于是我找了個環(huán)境,把程序運行起來試下。
先用虛擬機,跑的一個 32 位的紅帽系統(tǒng),程序運行起來,好像只是一個普通的死循環(huán),半天也沒見他退出,而且程序也不卡頓。
看下進程的內(nèi)存使用情況,數(shù)值一直都沒變。
應(yīng)該可以得出結(jié)論,雖然不停的申請,但是因為內(nèi)存沒有使用,所以系統(tǒng)并沒有真正的分配。
修改下代碼,申請了內(nèi)存后,使用 memset 把內(nèi)存初始化一下,再次運行,不一會虛擬機卡頓,直到程序被殺死。
換個環(huán)境,這次使用 64 位的Ubuntu,同樣的代碼,沒有初始化內(nèi)存,運行程序,很快進程就被殺死。
運行的時候看了下內(nèi)存的使用情況,確實是在快速的增長。
所以在這個環(huán)境里面,即使申請的堆內(nèi)存沒有使用,系統(tǒng)也確實給分配了。
同樣是 malloc 函數(shù),不同的操作系統(tǒng),內(nèi)存管理的策略也不太一樣。
#include#include int main() { char *p = NULL; while (1) { p = (char *)malloc(1); *p = 1; } return 0; }
最后給大家看個筆試題,也是關(guān)于 malloc 函數(shù),運行程序,應(yīng)該是個怎樣的現(xiàn)象?如果你能看出來,歡迎在評論區(qū)交流。
-
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
83029 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64949 -
malloc
+關(guān)注
關(guān)注
0文章
53瀏覽量
227
原文標題:不停的malloc,程序會不會異常
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
機器學(xué)習(xí)異常檢測實戰(zhàn):用Isolation Forest快速構(gòu)建無標簽異常檢測系統(tǒng)

評論