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