記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。
棧 先進後出(filo—first-in/last-out)
就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。(c#裡,值型別被儲存在棧上)
堆 先進先出(fifo—first in first out)
就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。(c#裡,引用型別被儲存在堆上)
自由儲存區
就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。
全域性/靜態儲存區
全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。
常量儲存區
這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)
例子-棧
int a=3編譯器先處理int a= 3;首先它會在棧中建立乙個變數為a的記憶體空間,然後查詢有沒有字面值為3的位址,沒找到,就開闢乙個存放3這個字面值的位址,然後將a指向3的位址。接著處理int b= 3;在建立完b的引用變數後,由於在棧中已經有3這個字面值,便將b直接指向3的位址。這樣,就出現了a與b同時均指向3的情況。;int b=3;
例子-堆
public方法及方法的引數被放置到棧上,接下來,控制被傳遞到堆疊中addfive()的指令上。class
myint
public myint addfive(int
pvalue)
感謝咱們閱讀!
基礎才是重中之重 位的運算
回到目錄 位運算無論在 還是在 裡都有對它支援,位運算即對數值型別的每位進行計算,對於程式裡,你可以使用十進位制,十六進製制,二進位制對它進行位運算,事實上無論你使用哪種進製,對於計算機來說最後都為把它轉換成二進位制 的形式,因為二進位制為簡單,呵呵。下面是關於位運算的 運算符號 位運算操作符 運算...
基礎才是重中之重 值型別和引用型別
回到目錄 在 visual basic 中,資料型別是基於其類別實現。根據特定型別的變數儲存的是自己的資料還是指向資料的指標,可以對 visual basic 資料型別進行分類。如果它儲存的是自己的資料,則它是值型別 如果它儲存指向記憶體中其他位置的資料的指標,則它是引用型別。值型別 如果資料型別在...
基礎才是重中之重 執行緒安全的Hashtable
執行緒安全就是多執行緒訪問時 web網頁多使用者訪問乙個頁面時 採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。hashtable 表示鍵 值對的集合,這些鍵 值對根據鍵的雜湊 進行組織,它的k...