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

[复制链接]
7300|24
hotpower 发表于 2008-9-11 18:33 | 显示全部楼层

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

AIRWILL 发表于 2008-9-13 17:36 | 显示全部楼层

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

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

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




fsaok 发表于 2008-9-14 07:59 | 显示全部楼层

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

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

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

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

而全局变量,就是不管MCU运行到哪,只要程序不去显式修改这个变量,它的值就永远不变。
linzhiqi1 发表于 2008-9-22 18:45 | 显示全部楼层

搂主太偏激

彪哥 发表于 2008-10-23 23:24 | 显示全部楼层

楼上所言极是

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

本版积分规则

快速回复 在线客服 返回列表 返回顶部