局部變量被分配在棧里。 ?
? 全局變量和靜態(tài)變量都存在靜態(tài)存儲區(qū)。 ?
? new出來的空間在堆里。 ?
? ?
? 給局部變量自動初始化為0也不一定就安全。對于一個(gè)變量沒有意義的值就是不安全的。0一定有意義么?c++從效率出發(fā),其編譯器的原則就是“非必要不使用”。對于可做可不做的,它都會選擇不做。
樓上說得不錯(cuò),“非必要不使用”,就應(yīng)如此,這就是C/C++的原則
我們通常說的“堆”其實(shí)是“數(shù)據(jù)段(data ? segment)”的一部分,動態(tài)分配內(nèi)存(如new ? 和 ? malloc)本質(zhì)上都是在“數(shù)據(jù)段”中尋找足夠大小的內(nèi)存塊,然后分配給應(yīng)用程序; ?
? ?
?
全局變量是在“數(shù)據(jù)段”中除了“堆”之外的空間里面,它們會被自動初始化(其實(shí)在C語言中還分為“已初始化”和“未初始化”兩種,但是在c++中都是“已初始化”的了)。而局部變量是分配到“棧(stack)”中,它們是不會被自動初始化的。
對
局部變量的初始化是程序員的責(zé)任 ?
? c++編譯器只做自己該做的事情~