变量的内存分配
我在一本书上看到了这样的描述:
全局变量和静态变量在定义(分配空间)时,将位模式清0,局部变量在定义时,分配的内存空间内容保持原样,故为随机数。
请问这句话什么意思,或者在那些书里可以查到他们的详细解释,谢谢!
问题点数:20、回复次数:9Top
1 楼codfish(户中)回复于 2002-01-31 16:56:00 得分 0
全局变量和静态变量在定义赋初值,进行0初始化,
局部变量在定义时要自定义,否则是野变量,很危险哟!
如 int nRet;
可靠写法:int nRet=0;
三种变量分配位置有区别,编译器对其操作有区别.
Top
2 楼cshchina(找工作)回复于 2002-01-31 17:00:06 得分 0
全局变量和静态变量在定义时系统将其清0,
而局部变量系统是不会这样对待的Top
3 楼jyc_nj(老蔣)回复于 2002-01-31 17:01:09 得分 0
是说全局变量在编译的时候会自动初始化,而局部变量是从栈里分配的内存空间,在超过它的有限范围后就给释放,可能会给多次分配,所以定义时不作变化,是乱数。
所以,你的局部变量在用前一定要自己完成附初值,而全局的不用,不过,定义时附初值是个好习惯。Top
4 楼x_danny(hu_xx)回复于 2002-01-31 17:25:08 得分 0
全局变量和静态变量会自动初始化(只有一次),但局部变量不会自动初始化,因此使用时需特别小心。Top
5 楼echolover(盈子)回复于 2002-01-31 17:33:44 得分 0
全局变量和静态变量在编译时如果是内建类型(如int,char。。)编译器会在data segment内为它们分配内存,并初始化为0,如果是自定义类型只分配内存空间,在进入main之前会调用constructor初始化它。而局部变量若不赋值,会在栈中分配,但不会初始化,保持上次用过的值。Top
6 楼tmp2002(C#Online)回复于 2002-01-31 19:49:03 得分 0
接echolover的话, 局部变量赋值,还是在栈里分配空间!Top
7 楼d_selenite(计算机的奴隶)回复于 2002-01-31 21:23:36 得分 20
全局变量和静态变量是在编绎的时候就分配好的,在相应的位置全填了零,在实模式方式下就是:全局和静态是填在数据段里的零,而局部变量则是在需要时临时在堆栈段里分配的,其值就是分配的空间里原先的数据,所以是随机的Top
8 楼mike_cx(mike)回复于 2002-02-01 09:43:22 得分 0
谢谢各位Top
9 楼TalentSprite(举头望明月)回复于 2002-02-01 10:36:22 得分 0
看看!Top




