免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5558 | 回复: 7

[C] 函数内的局部变量在编译阶段分配内存,占用空间吗? [复制链接]

论坛徽章:
0
发表于 2009-08-17 20:45 |显示全部楼层
10可用积分
一直以为局部变量在编译的时候是不分配内存的,在最后生成的二进制文件中是不占用空间的,只有在调用的时候才会去栈(stack)中分配,
但是今天在看一本dsp的书,上面写到编译器在编译的时候,一般的局部变量都是分配在.stack段中,这把我就搞糊涂了

我在ads的环境中(arm开发环境)试了一下,
比如
char gloabA[10];
function()
{
  char a[10];
……
}
发现把char a[10]改成char a[20],但是生成的二进制文件中rw和zi段大小并没有改变,rw就相当于.data,而zi就相当于.bss段
而把char gloabA[10]改成char gloabA[20],zi的大小是改变的,因为gloabA是未初始化的全局变量,这个说明gloabA在编译的时候是分配的空间的。

function1()
{
    char a=1;
    //处理过程

}

function2()
{
    char b=2;
    //处理过程

}

void main()
{
    int c=3;   
    function1();
}


上面的例子中,a、b、c分别是3个局部变量,但是b所在函数function2并没有被main函数调用,试问在编译后,会给abc分配空间吗,还是在运行时,用到时再去栈里面分配?


对编译过程不慎了解 发帖求解 谢谢

[ 本帖最后由 Huntsmen 于 2009-8-17 20:49 编辑 ]

最佳答案

查看完整内容

栈空间是在运行时分配和释放的。至于DSP,如果真的在编译时确定stack大小,是不是DSP的需求啊?不是编译的问题,编译器只是解决处理器的需求。

论坛徽章:
0
发表于 2009-08-17 20:46 |显示全部楼层
栈空间是在运行时分配和释放的。
至于DSP,如果真的在编译时确定stack大小,是不是DSP的需求啊?
不是编译的问题,编译器只是解决处理器的需求。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-08-17 20:53 |显示全部楼层

回复 #1 Huntsmen 的帖子

原帖由 Huntsmen 于 2009-8-17 20:45 发表
一直以为局部变量在编译的时候是不分配内存的,在最后生成的二进制文件中是不占用空间的


你做的实验和预想的并不产生冲突嘛。

原帖由 Huntsmen 于 2009-8-17 20:45 发表
发现把char a[10]改成char a[20],但是生成的二进制文件中rw和zi段大小并没有改变

这并不能证明, 局部变量会占用可执行文件的空间。

原帖由 Huntsmen 于 2009-8-17 20:45 发表
这个说明gloabA在编译的时候是分配的空间的。

因为gloabA是全局变量, 是静态存储, 所以还是不能证明局部变量会占用可执行文件的空间。

论坛徽章:
0
发表于 2009-08-17 20:56 |显示全部楼层
我之所以加个gloabA变量就是为了对比,修改局部变量的大小,并没有改变rw和zi段的大小,而修改gloabA的大小可以改变zi段的大小,为了验证我的想法是正确的

但是见书上这么说 所以发个贴求证一下 毕竟自己对编译过程不是很了解 呵呵

[ 本帖最后由 Huntsmen 于 2009-8-17 20:59 编辑 ]

论坛徽章:
0
发表于 2009-08-17 20:59 |显示全部楼层
好吧,某编译器有一个alloc stack的动作,但是翻译成汇编之后就是sp指针的加减了。
因为不了解DSP,所以不敢说树上错了。

论坛徽章:
0
发表于 2009-08-17 22:09 |显示全部楼层
用ads的话,无论线程或主线程的stack size,
LZ自己要控制啊,这个就意味着 “分配” 呀

论坛徽章:
0
发表于 2009-08-18 08:37 |显示全部楼层
原帖由 prolj 于 2009-8-17 20:49 发表
栈空间是在运行时分配和释放的。
至于DSP,如果真的在编译时确定stack大小,是不是DSP的需求啊?
不是编译的问题,编译器只是解决处理器的需求。


这个回答正确。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2009-08-18 09:55 |显示全部楼层

回复 #1 Huntsmen 的帖子

reiase那家伙前段时间好像有搞dsp相关的移植。  问问他看?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP