局部变量被分配在栈里。
全局变量和静态变量都存在静态存储区。
new出来的空间在堆里。
给局部变量自动初始化为0也不一定就安全。对于一个变量没有意义的值就是不安全的。0一定有意义么?c++从效率出发,其编译器的原则就是“非必要不使用”。对于可做可不做的,它都会选择不做。
楼上说得不错,“非必要不使用”,就应如此,这就是C/C++的原则
我们通常说的“堆”其实是“数据段(data segment)”的一部分,动态分配内存(如new 和 malloc)本质上都是在“数据段”中寻找足够大小的内存块,然后分配给应用程序;
全局变量是在“数据段”中除了“堆”之外的空间里面,它们会被自动初始化(其实在C语言中还分为“已初始化”和“未初始化”两种,但是在c++中都是“已初始化”的了)。而局部变量是分配到“栈(stack)”中,它们是不会被自动初始化的。
对
局部变量的初始化是程序员的责任
c++编译器只做自己该做的事情~