對於區域性變數,如果是基本型別,會把值直接儲存在棧;如果是引用型別,比如string s = new string("xuenixiang");會把其物件儲存在堆,而把這個物件的引用(指標)儲存在棧。
再如string s1 = new string(「xuenixiang」);
string s2 = s1;
s1和s2同為這個字串物件的例項,但是物件只有乙個,儲存在堆,而這兩個引用儲存在棧中。
類的成員變數在不同物件中各不相同,都有自己的儲存空間(成員變數在堆中的物件中),基本型別和引用型別的成員變數都在這個物件的空間中,作為乙個整體儲存在堆。而類的方法卻是
該類的所有物件共享的,只有一套,物件使用方法的時候方法才被壓入棧,方法不使用則不占用記憶體。
全域性變數 區域性變數在記憶體中的位置
一般工程編譯完成後會生成.o 檔案 然後通過link 成乙個完整的映象 elf 檔案一般包含 一下幾個 段 file header欄位裡存放了描述整個檔案的基本屬性資訊的內容,如程式入口位址,其他各段資訊 偏移量和範圍 text section 主要是編譯後的原始碼指令,是唯讀字段。data sec...
全域性變數和區域性變數在記憶體裡的區別?
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...
全域性變數和區域性變數在記憶體中的區別
static函式和普通函式區別作用域記憶體儲存數量 關於變數訪問速度的相關備忘 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等 操作方式類似於資料結構中的棧 2 堆區 heap 由程式設計師分配釋放,如果不釋放可能由os 但區別與資料結構中的堆,其分配方式類似於鍊錶 ...