malloc和free的實現

2021-05-10 19:20:57 字數 387 閱讀 1625

被人問到malloc和free的實現問題。

我們知道malloc的呼叫形式如:type* p = (type *)malloc(n*sizeof(type))

free的呼叫形式如:free(p)

好了,問題來了,free函式,我們只給傳入乙個指標,沒有傳入記憶體塊的大小n,那麼編譯器怎麼知道要釋放多少位元組的記憶體,如果讓你來實

現怎麼實現?

當時,蒙了,鬱悶(丟人)。。。

之前自己都看過類似的**的。。。

無非就是當申請記憶體的時候,p指向的記憶體的起始位元組有幾個存放著這塊記憶體的一些資訊,包括大小,型別等。

free的源**:

struct mem_control_block

void free(void *ptr) 

malloc和free的實現原理

對於malloc來說,很多人都不陌生。然而,我們對它的了解並不是很深,我們常常會用,而不明白其中的原理,從而,很容易造成記憶體洩漏,記憶體碎片等問題。這常常讓我們頭痛不已,故而我們需要進一步的去了解它。首先,什麼事malloc?在很多人認為malloc是個關鍵字,但是malloc只是c的標準庫中提供...

malloc和free的區別

1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...

C語言malloc和free實現原理

以下是一段簡單的c malloc和free到底做了什麼?int main malloc和free的debug和release版本實現各不相同,而且相差很大。malloc需要分配的記憶體會比實際的size多36byte。最終分配的記憶體塊如下 crtmemblockheader是乙個雙向鍊錶結構,其定...