Linux原始碼分析之 malloc free

2022-03-10 19:39:06 字數 734 閱讀 8994

之前寫**的時候一直有個疑問,malloc申請記憶體的時候指定了記憶體大小,但是free的時候卻只指定要釋放的記憶體位址,那麼free是如何知道它要釋放的記憶體空間大小呢?

原始碼之前,了無秘密,下面就從原始碼來扒一扒。

由上圖可知,malloc和free分別呼叫了malloc_internal和free_internal來實現具體的操作。

在malloc_internal中,最需要注意的一行就是計算需要分配空間的大小,可以看到,計算該空間時還加了乙個sizeof(allocation_header),該結構體內部有兩個成員:allocation_index、allocation_size。

此處的allocation_size是解答上面疑問的關鍵,它記錄了呼叫malloc時分配的空間大小,再來看free_internal。

在free中,先是呼叫get_header獲取到了呼叫malloc時分配的allocation_header,然後將該header作為引數傳入free_internal中,因此呼叫free時不必傳入空間的大小,因為可以計算出來。

mall原始碼簡略分析 資料庫關係模型的實現

對於資料庫關係模型的分析,我覺得需要從兩個函式說起 獲取乙個模型 function m model name,params array is new false include once model file model name ucfirst model name model if is new...

原始碼分析之LayoutInflater

簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...

原始碼分析之HashMap

首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...