const變數儲存在.rodata(read only)區域;
char* p = "abcd"; p指向的是靜態文字區域.text
.rodata 和 .text 被合併為乙個segment,由os保護起來,只可讀。
register變數存放在.bss區域;
區域性變數存放在棧空間,static變數存放在靜態儲存空間 (.data)
.bss 和.data 被合併為乙個segment,可讀可寫。
變數在記憶體中的不同位置,影響著變數的讀寫方式。程式1很正常,因為p在棧上,可以修改。
程式2就會出錯。因為對於全域性區域的值,程式設計師是不可以修改的。
如果想要修改其值,可以宣告為靜態變數,這樣編譯器會在靜態儲存區域分配一塊空間。如程式3:
另外,乙個類中的靜態成員變數時不佔這個類的儲存空間的。
比如class a{}; class b;
sizeof(a) = sizeof(b) = 1
靜態成員應該在類定義體的外部初始化。static int b::m = 6;
const成員應該在初始化列表中初始化,除此之外,沒有任何地方可以改變它的值。
c c 變數在記憶體中的分布
c c 變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫乙個測試程式 執行結果 release版本 如下 可以看出 1.變數在記憶體位址的分布為 堆 棧 區 全域性靜態 常量資料 2.同一區域的各變數按宣告的順序在記憶體的中依次由低到高分配空間 只有未...
C C 變數在記憶體中的分布
c c 變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫乙個測試程式 view plain copy to clipboard print?include include int g i 100 int g j 200 int g k,g h int ...
C C 變數在記憶體中的分布
c c 變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫乙個測試程式 view plain copy to clipboard print?include include int g i 100 int g j 200 int g k,g h int ...