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