初學c和資料結構是對其很不明確,通過一些資料,稍微理解了,所以記下以後複習之用,如果有錯誤或者理解不當的情況請指正,不勝感激。
一malloc和free函式
malloc函式:(void*)malloc(sizeof(byte)),向系統申請大小的空間,然後返回指向這個記憶體的指標。如果記憶體分配失敗,則返回乙個空指標(null)當然,造成記憶體分配失敗的嗎原因有很多,其中乙個是記憶體不足。
而free就是把這個操作空間返回給系統,釋放這塊記憶體。具體**使用情況很簡單
1 #include2 #include3void
main()
4
注意:malloc和free是對應的,當申請的空間不再使用後一定要free;free後要把指標初始化,以防野指標是出現。
2.函式操作原理
malloc從**申請記憶體?是從作業系統中的堆中申請空間記憶體的,這和鍊錶有些相似,系統返回的指標指向堆中的記憶體,系統把空閒的結點練成乙個鍊錶,也就是空閒鍊錶,當malloc時,系統從空閒鍊錶中遍歷,找到所需空間的的堆結點,然後把此結點從空閒鍊錶中刪除,把此結點分配給程式,而free操作,則是把結點歸還到空閒鍊錶中,通過指標的作用,這裡不多說,可以看一下靜態鍊錶中的操作,是通過游標實現的,原理差不多。堆操作完成,當不需要使用次記憶體時,一定要釋放,同時需要對指標進行初始化。
堆的釋放是由程式設計師自己釋放的。
與堆相對的是棧
棧是由編譯器自動分配釋放,存放函式的引數值,區域性變數的值的。
假設定義乙個指標,此指標指向堆,也就是說內存在堆上,但這個指標位址在棧中儲存卡所以即使棧已經被銷毀了,但是那塊記憶體人在那裡,所以使用完後一定要free操作
暫時先說這麼多,下次再補充free和malloc函式源**及原理……
malloc函式和free函式
c語言中的動態記憶體分配函式malloc和free使用起來很靈活,但是也很容易導致錯誤,如果知道了malloc和free的實現原理,那麼,出錯的機會就很小了。malloc的實現原理 作業系統維護了乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,作業系統沿鍊錶尋找乙個大...
malloc與free函式用法
在c裡,記憶體管理是通過專門的函式來實現。另外,為了相容各種程式語言,作業系統提供的介面通常是c 語言寫成的函式宣告 windows 本身也由c和組合語言寫成 1分配記憶體malloc函式 需要包含標頭檔案 include 函式宣告 函式原型 void malloc int size 說明 mall...
自引用結構兼談Malloc和Free函式
一 自引用結構 1 什麼事自引用結構?自引用結構 self referential structure 是一種特殊的結構。主要特徵 乙個或多個自身的變數是指向自身的指標。2.判斷幾個自引用結構是否合法?這個結構是非法的,為什麼呢?結構裡面有包含b,b裡面有包含自己的成員b,這樣就會無休止的迴圈下去。...