打印

为什么Keil 里面定义的全局静态变量在两个函数中的地址不一

[复制链接]
4540|9
手机看帖
扫描二维码
随时随地手机跟帖
沙发
ruiwei0201|  楼主 | 2009-1-7 16:02 | 只看该作者

知道是什么问题了,不知道怎么准确描述

我的理解是这样的,全局静态变量在编译时编译器会分配一个地址,而每次在函数中使用该变量时,要确保其在编译时的初始值,所以在函数中使用时会有不同的地址。

使用特权

评论回复
板凳
computer00| | 2009-1-7 17:17 | 只看该作者

静态变量在函数返回后值依然要保存,其生存周期是全局的

所以地址必须要不一样,不能覆盖。

使用特权

评论回复
地板
ayb_ice| | 2009-1-7 20:34 | 只看该作者

LZ太想当然了吧

使用特权

评论回复
5
HWM| | 2009-1-7 20:46 | 只看该作者

若是直接引用,不可能两样。而若是参数传送,

建议楼主具体了解一下“传值”和“传地址”的差别。

使用特权

评论回复
6
djyos| | 2009-1-7 23:33 | 只看该作者

keil的全局变量

    一般来说,全局变量有一个唯一的地址,但keil比较特殊。它为了节省51那可怜的一点点内存,使用了覆盖技术。
    如果你在程序某个地方访问了全局变量,但编译器判断到该全局变量的值不再被使用,就会释放掉它,局部变量就有机会重复利用这个地址,keil的局部变量不是在栈中分配的。当你再次访问这个全局变量时,又会重新分配,地址就不一样了。总之,如果你在若干个地方使用了该全局变量,而该变量的值又不互相依赖的话,每次都可能是重新分配的,地址自然不一样。

使用特权

评论回复
7
computer00| | 2009-1-7 23:37 | 只看该作者

不会吧...还有这样的事?全局变量的地址都会变?

使用特权

评论回复
8
E007| | 2009-1-7 23:41 | 只看该作者

没听说过也没碰到过这种事~

    我通常的做法是直接给全局变量"定位",HOHO~~~

使用特权

评论回复
9
xwj| | 2009-1-7 23:48 | 只看该作者

我想,是LZ把全局变量和静态变量搞混了

请先弄清楚各种变量的作用域和生存周期

使用特权

评论回复
10
zyok| | 2009-1-7 23:52 | 只看该作者

看看有没有越界使用的数组。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

149

帖子

0

粉丝