malloc失敗淺析

首先,瞭解一下內存分配的機制。
OS將空閒內存塊的地址鏈接爲一個鏈表,方便用戶在申請內存時可以快速定位到空閒內存塊。由於鏈表的特性,空閒內存鏈表的插入對應舊內存塊釋放,刪除對應新內存塊申請,效率很高。
但是並不是每次malloc都能成功,原因可能有:
1、申請的內存超過了當前空閒內存的大小
(如果由於外部碎片而沒有一整塊內存可以滿足申請的內存大小,OS是否會先進行碎片整理?未知…)
2、存在內存越界訪問,破壞了malloc對應內存的信息
爲了對malloc失敗的情況進行錯誤處理,需要注意代碼的健壯性:

if (A=(DATA *)malloc(sizeof(DATA))) == NULL)
		goto err;
...
err:
//錯誤處理代碼

這裏可以用do…while(0)替代goto
關於do…while(0)可以參考https://blog.csdn.net/jojozym/article/details/104847877
計算機真是太妙了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章