1. 程式人生 > >C++中未初始化的區域性變數與全域性變數的區別

C++中未初始化的區域性變數與全域性變數的區別

C++中被初始化全域性變數在編譯時儲存在data段中,而沒有被初始化的全域性變數儲存在bss段中。這樣儲存的理由是在data段的變數在編譯生成的檔案中需要分配空間儲存變數值,而沒有初始化儲存變數(或初始化為0的靜態變數、全域性變數)其預設值為0,沒必要將這些值均為0的變數儲存在data段中,而採用bss段只是給未初始化的全域性變數和區域性靜態變數預留位置,bss段並沒有內容。但是在程式執行時這些變數會佔用記憶體空間,所以可執行檔案必須記錄bss段中變數佔用空間的大小。

而區域性變數是在程式執行時由棧分配,對於沒有初始化的區域性變數,VC的DEBUG版會把未初始化的變數value,初始化為sizeof(value)個0xCC。所以我們會看到未初始化的整型的值始終是

-858993460,而不是任意值。有意思的是漢字“燙”的編碼恰好就是1100110011001100,所以要是我們輸出一段字串的值是一長串“燙”時,那麼就要注意是否是字串沒有被初始化引起的!