2015-06-19 57 views
2

在未初始化的數據段,內核初始化初始化變量爲0。未初始化的數據段

但是,如果我們直接使用未初始化的變量(如int總和;以及不是int總和= 0;)並在程序中使用它,如sum = sum + n(n是任意數字),總和將取任何垃圾值。

那麼爲什麼總和會採取任何垃圾值,如果它已被內核初始化爲0?

回答

1

你似乎在問關於編譯時初始化和運行時初始化的區別。在下面的C語言代碼:

int i; 
int main() { 
    int j; 
    return i + j; 
} 

i是全球範圍的變量,因此是缺省初始化爲零,這是通過將其包括在程序的數據段來實現。這將作爲一個初始值塊寫入二進制文件,或者它將向加載程序描述塊的大小,當可執行文件啓動時,加載程序將用零填充它。

j是一個局部變量,它將存在於寄存器或堆棧中。 C和C++選擇不默認初始化這些值,因此如果您在不初始化它們的情況下訪問它們,您將看到恰好在其寄存器/堆棧位置中的值。