发新帖我要提问
12
返回列表
打印

C51内存单元释放问题???????

[复制链接]
楼主: soso
手机看帖
扫描二维码
随时随地手机跟帖
21
hotpower| | 2008-9-11 18:33 | 只看该作者 回帖奖励 |倒序浏览

局部变量和全局变量是有些区别~~~

使用特权

评论回复
22
AIRWILL| | 2008-9-13 17:36 | 只看该作者

我看这样的回答不能说明所以的疑问

   局部变量也占内存?
不能简单的说是或者不是, 应该说明为什么

如果不声明本函数是重入的, KEIL C 编译器会把变量放在 DATA 区, 这样可以得到高效的代码. 如果是重入的, 则分配变量到堆栈(IDATA )区, 就不会出现 DATA 区消耗的增加了. 毕竟 DATA 的处理比 IDATA 指令少, 效率高. 




使用特权

评论回复
23
fsaok| | 2008-9-14 07:59 | 只看该作者

局部变量和全局变量大有区别

其实没有所谓局部变量释放语句,局部变量是程序完后自动释放的。

如果一个key() 函数的局部变量,占用了30h这个地址,当key()运行完后,30h这个地址可能会被led()函数做另一个变量,除非使用静态局部变量。

简单说,假设a是key函数()的一个局部变量,在key()函数运行最后是1,不保证下次运行key()函数的最开始,这个a还是1。

而全局变量,就是不管MCU运行到哪,只要程序不去显式修改这个变量,它的值就永远不变。

使用特权

评论回复
24
linzhiqi1| | 2008-9-22 18:45 | 只看该作者

搂主太偏激

使用特权

评论回复
25
彪哥| | 2008-10-23 23:24 | 只看该作者

楼上所言极是

    其实楼主是对自动释放理解有误,局部变量和全局变量一样,都要占用内存,也就是只要程序中定义了变量,这个变量就会被分配一个地址,那么全局变量的地址只要你写入一次,在不修改的前提下,任何时候都是这个值,而且整个程序段会共享这个值,任何时候也都可以修改这个值。
    而局部变量则不同,它的地址内的内容可以被你的任何一条语句修改,只要当前函数对这个地址单元操作完毕,其他函数就可以继续使用该地址,此过程可理解为释放。

使用特权

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

本版积分规则