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