當前位置:編程學習大全網 - 源碼下載 - 免費源代碼詳細解釋

免費源代碼詳細解釋

Free函數,它實際做的並不是真的釋放內存。

首先妳要知道內存是由操作系統管理的(操作包括分配和釋放等。).

系統中的內存基於C語言的內存分配機制被劃分為許多塊,C的底層代碼用數據結構chunk表示。chunk中有壹個標誌位,用於指示內存塊是要分配還是要分配。每次調用malloc的時候,這個標誌位會被置為1(好像是1,記不太清楚了),調用free的時候會被置為0。操作系統的內存管理機制會根據這個值分配和釋放內存。

也就是說,在調用free的時候,只設置了這個標誌位(當然其他的都做了,就妳的問題來說,只討論這個),內存還是原封不動的在那裏。所以,當妳在系統真正釋放這個內存之前再次訪問這個地址,妳會得到妳想要的結果。

描述,"輸出test 1->;A為0”,其原因可能是當chunk block的標誌位被置位時,A的值被覆蓋。在chunk數據結構中,第壹個字節的前8位是標誌位,後面的24位也各有用途。是什麽原因導致A的值為0?有興趣可以自己研究壹下。可以看看linux的glibc源代碼。

"(* test 1->;下壹個)。a是10”,簡單。下壹個offset struct test占用的內存“頭”比較遠,所以在空閑的時候設置值的壹些操作沒有影響,而且這個指針的值是可以訪問的,test0在函數棧裏還是原封不動的,自然可以訪問。

P.S c/C++的Malloc/free和new/delete都有這個特性,所以編程的時候要養成壹個好習慣,在調用free和delete的時候把指針賦值為NULL,比如:

免費(ptr);

ptr = NULL

或者

刪除ptr

ptr = NULL

  • 上一篇:php怎麽建立站點PHP如何創建站點
  • 下一篇:骨傳導藍牙耳機哪個牌子比較好?
  • copyright 2024編程學習大全網