88问答网
所有问题
C语言局部变量是何时分配和回收空间的?如图中所有的变量他们的分配和销毁都是在什么时候呢?
如题所述
举报该问题
推荐答案 2011-02-24
前面所以回答都不全面。
1、局部变量所占用的内存空间的分配和销毁,取决于
编译器
的实现,编译器在为了优化程序性能,可能有不同的策略来分配、释放内存。比如:VC编译器可能在函数入口处即分配这里的全部变量,GCC编译器也可能真的在定义处才分配。
2、你该探究的应该是这些局部变量的生命期。这个b\c\d\e 的生命期都是开始于定义变量的地方,终止于语句块结束的地方(对应的反花括弧处结束)
3、这是 C++ 的代码,C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变量准备栈空间。所以有你这个困惑(局部变量在函数入口时就全部入栈,这个说法是错的么?)
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://88.wendadaohang.com/zd/ggBaBatVg.html
其他回答
第1个回答 2011-02-24
如上图, a在整个question()中都存在
b和c[12]在if判定为真的{}语句块中分配,离开if语句块就销毁
d和e[10]在else语句中分配,离开 else{}就销毁
不过上面的程序有问题
if(a='A')里面是个赋值语句,永远为真,所以else永远得不到执行
追问
感谢回答,但是我记得以前有看过资料说局部变量在函数入口时就全部入栈,这个说法是错的么?还有数组也是运行时分配空间的么?如果是的话为什么不能动态分配?谢谢~~~
第2个回答 2011-02-25
楼上有误,C按不同的标准 定义变量的方式有不同,有些标准支持在语句中间定义变量
而另一些C标准也不是说必须在函数开始定义变量,其实只要是在一个语句体的开始定义就可以!
楼主,你只需要关心变量生命期的问题就行了,压栈出栈在不同的编译器上有不同的顺序
第3个回答 2011-02-24
你的程序有错误,if(a='A')这个赋值语句,因为赋值后a='A'不为0故系统默认为真,此处你的if()语句没用;还有你声明函数为整型的,要返回一个整型的值,你学的东西里面都没有返回值。当question函数被调用时,系统会为它分配一块儿内存,一开始时,把实参复制给形参 a。然后分配空间给b并给他写入一个整型的0;为c开辟了12个字节的空间。调用结束完这个函数后,会自动回收分配的空间。
第4个回答 2011-02-24
感谢回答,但是我记得以前有看过资料说局部变量在函数入口时就全部入栈,这个说法是错的么?还有数组也是运行时分配空间的么?如果是的话为什么不能动态分配?谢谢~~~
====================
函数入口时全部入栈是对的。
数组是运行时临时分配空间的。但是你指定大小了。就不能动态分配了。
如果要动态分配,得重新开辟内存空间,然后拷贝或者移动数组的内容。这个是要手动完成的。
C语言的强大之处之一就是内存管理的权限比较大。
相似回答
C语言中 局部变量和
全局
变量都是
存储
在什
么区
答:
C语言中局部变量存在栈里,全局变量存静态存储区。局部变量在栈空间上分配
,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,...
C语言中的
局部变量
,存储
在什
么地方?
答:
C语言中的局部变量存储在栈里
。普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配(malloc),但是记得使用完这个堆空间后要释放之。在栈空间上分配时是要注意内存的,不能分配内存过大。如果栈内空间小于...
C语言中
,给
变量分配
内存
是在什么时候?
是在编译的时候吗?
答:
编译只是把源文件翻译成可执行文件,此时如果不运行程序,分配内存干吗?应该是在运行程序时分配内存
C语言变量的
定义
与
使用
答:
C语言的
基本功能单元是函数。在函数内部定义
的变量是局部变量
,仅能在函数内部使用。函数可以组成程序的功能模块,而这些函数头文件中定义的静态变量(局部变量)可以被模块内的所有函数访问。若在模块内部声明变量并在头文件中导出,该变量类型则为全局变量,可在整个工程中被所有函数访问。3. 合理分配RAM...
C语言 局部变量和
自动
变量的
区别是什么?请简单举例子说明一下 谢谢_百 ...
答:
局部变量包括自动
变量和
静态局部变量,静态
局部变量是
编译器在数据段或者bss段分配的,如果没有初值则一般放在bss段,由程序加载器将其内存清零;而自动
变量是在
栈上,函数调用结束时,栈会被回收,自动变量也就消亡了,再次分配给其他自动变量时不会自动清零,所以如果没有初值就是垃圾数据。举个例子:static int...
静态
变量在
内存中存放的位置是
答:
C语言中定义的静态变量存放在栈区,动态分配的内存空间位于堆区。静态变量在内存空间中只有一份,被类的多个对象共享。
局部变量在栈空间上分配
,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。全...
C语言中
自动
变量是
什么
变量?
它是动态
变量的
意思吗?怎么理解?
答:
局部变量
,如不作专门说明为静态变量,都是动态分配存储空间,存储在动态存储区中。这种变量叫自动变量。这种变量只在定义它们的时候才创建,在定义它们的函数返回时系统
回收变量
所占存储空间。对这些变量存储
空间的分配和回收
是由系统自动完成的,所以也叫自动变量。一般情况下,不作专门说明的局部变量,均...
什么是
局部变量
答:
在同一源文件中,全局变量
和局部变量
同名时,在
局部变量的
作用域内,全局变量不起作用的。二。静态存储变量和动态存储变量 对于程序运行期间根据需要进行临时动态分配存储
空间的变量 为
动态存储变量 对于那些程序运行期间永久占用固定内存的变量 称为静态存储变量 还要说明的是 程序的指令代码是存放在程序代码...
大家正在搜
C语言全局变量和局部变量总结
C语言全局变量局部变量题目
c语言本地变量和局部变量
c语言全局变量与局部变量
c语言中局部变量什么意思
static局部变量和全局变量
全局变量和局部变量举例
C语言中局部变量
c语言怎么定义局部变量
相关问题
c语言局部变量会被回收吗?
C 语言中全局变量、局部变量、函数参数个是在什么时候分配内存...
(C语言)编译时给全局变量和静态变量分配存储空间,运行时给局...
C语言的变量根据分配的存储空间的不同 可以分为哪三种变量?
go语言,局部变量什么时候回收
C++是在什么时候给变量分配的内存
C语言局部变量在栈上分配的方式是怎么样的?
C语言 变量空间回收