标题:[讨论]变量地址分配的疑惑
取消只看楼主
blackorchis
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-7-4
 问题点数:0 回复次数:3 
[讨论]变量地址分配的疑惑
许多课本上有如下解释:程序在编译时,编译器为每一个动态变量分配唯一的地址。
但是又有:对于动态变量,只有函数被调用时,才分配空间。
问题是:函数被调用时分配的空间的地址难道与编译时分配的唯一的地址不一样?
我的理解是:在编译阶段,编译器为每一个动态变量分配唯一的地址,这时的地址只是“虚”的,就像我们买的火车票上的座位号一样。而函数调用时分配的地址,就像我们上车时坐的实际的座位号,也许中途有人下车,因此可以动态地选择可用的座位。这个比方的前提当然是假设火车票在同一时间售出。

不知以上理解可否合理,请各位指教!
搜索更多相关主题的帖子: 变量 火车票 地址 动态 座位号 
2007-09-06 21:11
blackorchis
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-7-4
得分:0 
回复:(blackorchis)[讨论]变量地址分配的疑惑
答2楼:

对于动态变量,当运行到动态变量所在的作用域(一般是所在的那层大括号)时,
才分配空间,在退出作用域前变量的地址是唯一且不会变化的,
但下一次再次运行到相同作用域时,变量地址很可能与上次的地址不一样

我的问题是:如你所说“在退出作用域前变量的地址是唯一且不会变化的”,说明这些变量还占有空间?!
2007-09-07 08:49
blackorchis
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-7-4
得分:0 
回2楼和6楼:
作一个非常简单但又略显笨拙的假设:如果只有60个字节的可分配空间,我们在两个程序块中分别定义了一个char a[40]和char b[40],显然这两个数组不会同时占用内存空间,但编译能通过吗?因为如果编译器在编译时为每一个动态变量分配唯一的地址,很显然,地址不够用!
2007-09-07 10:26
blackorchis
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-7-4
得分:0 
所以,我的理解是:编译时,为每一个动态变量分配唯一的地址,而当程序运行时,动态地获得存储空间!
另一问题:如果有递归调用,而递归的次数在程序运行时决定(由用户输入),在调用的过程中,所有的参数要入栈,而这些参数的数目在编译时根本无法知道,更谈不上分配唯一的地址了,不知道如何理解?!

[此贴子已经被作者于2007-9-7 12:40:31编辑过]

2007-09-07 12:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-168202-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.438756 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved