读书人

int a=10的内存有关问题

发布时间: 2012-09-24 13:49:42 作者: rapoo

int a=10的内存问题

C/C++ code
void f(){int a=10;}


请教一下内存的分配问题,想看看我的理解是不是正确的。

C中,在f函数里面声明了一个局部变量a,那么
1、系统是不是就在内存中记下了一个地址,比如Ox1234,这个地址指向了一个起始地址,空间大小是sizeof(int),这块空间存放在栈中,对吗?
2、若上述正确。给a赋值10,就是在Ox1234这个地址空间存放了10的二进制值,对吗?
3、如果单单只是声明int a;并未给a赋值,请看看我这个观点正确与否:系统用一点空间写下Ox1234,Ox1234这块int大小的空间暂时并未赋值,那这算不算是已经把这块int空间分配出去了,不会给其他程序使用了?所谓的分配与未分配,实质是什么样的?


[解决办法]
1.是的
2.是的
3.int a是全局变量,你不显式初始化,一般会自动初始化为0,局部变量可能不会初始化;
已经把这块空间分配出去

[解决办法]
在f函数里面声明了一个局部变量a,系统在栈区为a分配一个地址空间,该空间中存放a的值,你可以把a看做是这块内存的名字
对于在栈区已经被分配的内存,系统内部有记录,在该变量生命周期结束前不会再分配给其他程序
声明int a;(如果a之前未被分配空间,也可以说是定义)并未给a赋值,系统也会把空间分配给a,只是该空间里的值是不确定的
[解决办法]
探讨

引用:

1.是的
2.是的
3.int a是全局变量,你不显式初始化,一般会自动初始化为0,局部变量可能不会初始化;
已经把这块空间分配出去


那么在什么样的情况下,会有声明了一个变量,但是未分配空间的呢?是不是只有指针才会这样?

[解决办法]
哦 也就是说,定义是不分配空间,但是声明是会分布空间的对吧

对不起,我表达得不清楚:
只针对你的三楼问题吧:
比如这种情况:
/*
test.c
*/
extern a; //这是声明一个变量a,这个时候系统就不会分配内存

int main(void)
{
...
return 0;
}
[解决办法]
探讨

引用:

引用:
引用:

1.是的
2.是的
3.int a是全局变量,你不显式初始化,一般会自动初始化为0,局部变量可能不会初始化;
已经把这块空间分配出去


那么在什么样的情况下,会有声明了一个变量,但是未分配空间的呢?是不是只有指针才会这样?

只是声明,可能不会分配空间;
定义会分配空间;
之前定义了……

[解决办法]
1、是直接在栈中开辟空间,不存在还有一个地址存放这个起始地址
2、10是存放在栈中,占用sizeof(a)个内存单元
3、是定义的时候分配空间。若未赋值,并且未使用,编译器可能忽略;先定义后赋值,定义的时候分配空间,空间的内容可能初始化0,也可能是原来的内容不变(未知),在该函数内(生存空间内),其他变量就不能占用这块空间。

读书人网 >C语言

热点推荐