基礎才是重中之重 記憶體裡的堆和棧

2021-09-07 18:04:07 字數 1143 閱讀 1555

記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

棧  先進後出(filo—first-in/last-out)

就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。(c#裡,值型別被儲存在棧上)

堆  先進先出(fifo—first in first out)

就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。(c#裡,引用型別被儲存在堆上)

自由儲存區

就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性/靜態儲存區

全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

常量儲存區

這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)

例子-棧

int a=3

;int b=3;

編譯器先處理int a= 3;首先它會在棧中建立乙個變數為a的記憶體空間,然後查詢有沒有字面值為3的位址,沒找到,就開闢乙個存放3這個字面值的位址,然後將a指向3的位址。接著處理int b= 3;在建立完b的引用變數後,由於在棧中已經有3這個字面值,便將b直接指向3的位址。這樣,就出現了a與b同時均指向3的情況。

例子-堆

public

class

myint

public myint addfive(int

pvalue)

方法及方法的引數被放置到棧上,接下來,控制被傳遞到堆疊中addfive()的指令上。

感謝咱們閱讀!

基礎才是重中之重 位的運算

回到目錄 位運算無論在 還是在 裡都有對它支援,位運算即對數值型別的每位進行計算,對於程式裡,你可以使用十進位制,十六進製制,二進位制對它進行位運算,事實上無論你使用哪種進製,對於計算機來說最後都為把它轉換成二進位制 的形式,因為二進位制為簡單,呵呵。下面是關於位運算的 運算符號 位運算操作符 運算...

基礎才是重中之重 值型別和引用型別

回到目錄 在 visual basic 中,資料型別是基於其類別實現。根據特定型別的變數儲存的是自己的資料還是指向資料的指標,可以對 visual basic 資料型別進行分類。如果它儲存的是自己的資料,則它是值型別 如果它儲存指向記憶體中其他位置的資料的指標,則它是引用型別。值型別 如果資料型別在...

基礎才是重中之重 執行緒安全的Hashtable

執行緒安全就是多執行緒訪問時 web網頁多使用者訪問乙個頁面時 採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。hashtable 表示鍵 值對的集合,這些鍵 值對根據鍵的雜湊 進行組織,它的k...