旅途

如果想飞得高,就该把地平线忘掉

内存分配1

局部变量被分配在栈里。  
  全局变量和静态变量都存在静态存储区。  
  new出来的空间在堆里。  
   
  给局部变量自动初始化为0也不一定就安全。对于一个变量没有意义的值就是不安全的。0一定有意义么?c++从效率出发,其编译器的原则就是“非必要不使用”。对于可做可不做的,它都会选择不做。

楼上说得不错,“非必要不使用”,就应如此,这就是C/C++的原则

我们通常说的“堆”其实是“数据段(data   segment)”的一部分,动态分配内存(如new   和   malloc)本质上都是在“数据段”中寻找足够大小的内存块,然后分配给应用程序;  
   
  全局变量是在“数据段”中除了“堆”之外的空间里面,它们会被自动初始化(其实在C语言中还分为“已初始化”和“未初始化”两种,但是在c++中都是“已初始化”的了)。而局部变量是分配到“栈(stack)”中,它们是不会被自动初始化的。

局部变量的初始化是程序员的责任  
  c++编译器只做自己该做的事情~

posted on 2007-09-06 01:48 旅途 阅读(81) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理