C语言中的 局部变量,存储在什么地方?

 我来答
小星星教育知识分享
高粉答主

2019-11-26 · 用教师的智慧点燃学生的智慧火花
小星星教育知识分享
采纳数:202 获赞数:67136

向TA提问 私信TA
展开全部

C语言中的局部变量存储在栈里。

普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配(malloc),但是记得使用完这个堆空间后要释放之。

在栈空间上分配时是要注意内存的,不能分配内存过大。如果栈内空间小于所申请的空间大小,那么这时系统将揭示栈溢出,并给出相应的异常信息。但是堆不一样,堆可分配空间是很大的。

扩展资料

局部变量分类

1、位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在(定义时出生,随着程序结束而结束)。

2、访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。

3、值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。

参考资料来源:百度百科—局部变量

TLast_Ghost
推荐于2017-11-26 · TA获得超过1542个赞
知道小有建树答主
回答量:649
采纳率:20%
帮助的人:514万
展开全部
栈区,或者CPU通用寄存器中!!!
不知道你对CPU有过了解么??? CPU内核中会有一个叫做SP的寄存器,存放着栈顶地址,所有局部变量,和中间数据都在这里存放,在一个程序调用一个函数,SP指针会增加该堆栈用到的所有临时内存的长度,局部变量也在其中,在函数退出时SP还原到原来的值,这样被调用的函数用到的所有临时数据也都释放。。。
当然也会存在CPU的通用寄存器中,因为有些CPU工作寄存器数量较多,如果局部变量不多,会直接放在寄存器内,而不是
放到内存里,这样也提高了执行速度。。。内存赋值需要取地址和写内存,本身步奏就多,而且内存操作没有寄存器块,
所以如果工作寄存器够用,是会存在工作寄存器(根据编译器而定,当然编译器考虑的通常很周全,会让速度尽量快)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
行增岳化鸟
2020-05-09 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:29%
帮助的人:838万
展开全部
栈区,或者CPU通用寄存器中!!!
不知道你对CPU有过了解么???
CPU内核中会有一个叫做SP的寄存器,存放着栈顶地址,所有局部变量,和中间数据都在这里存放,在一个程序调用一个函数,SP指针会增加该堆栈用到的所有临时内存的长度,局部变量也在其中,在函数退出时SP还原到原来的值,这样被调用的函数用到的所有临时数据也都释放。。。
当然也会存在CPU的通用寄存器中,因为有些CPU工作寄存器数量较多,如果局部变量不多,会直接放在寄存器内,而不是
放到内存里,这样也提高了执行速度。。。内存赋值需要取地址和写内存,本身步奏就多,而且内存操作没有寄存器块,
所以如果工作寄存器够用,是会存在工作寄存器(根据编译器而定,当然编译器考虑的通常很周全,会让速度尽量快)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-05-16
展开全部
一般情况下,局部变量存储在栈区
static修饰的局部变量会存储在堆区
栈区的变量随时可能会被释放掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Cliuye
2014-05-16 · 超过28用户采纳过TA的回答
知道答主
回答量:70
采纳率:100%
帮助的人:57.4万
展开全部
局部变量存储在栈里;堆里存放的是动态分配的内存,有malloc()分配
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式