不释放局部变量的问题

[复制链接]
5787|27
 楼主| morrisk 发表于 2012-12-8 17:37 | 显示全部楼层 |阅读模式
在用keil开发c51程序时,出现了不释放局部变量的问题。

评论

变量多了自动覆盖.如果你遇到覆盖的时候,你就会发有可能出现莫名其妙的错误.并不是他不释放,而是优先编译成不释放.然后编译不下就自动覆盖优化  发表于 2012-12-9 18:04
yinxiangh 发表于 2012-12-8 17:38 | 显示全部楼层
keil本身就是静态分配局部变量的
pangb 发表于 2012-12-8 17:40 | 显示全部楼层
楼上说得对,这点和标准C是有区别的
chenjunt 发表于 2012-12-8 17:40 | 显示全部楼层
也是最大区别
 楼主| morrisk 发表于 2012-12-8 17:42 | 显示全部楼层
只要没有警告,错误就是正常的?
juventus9554 发表于 2012-12-8 17:43 | 显示全部楼层
不是KEIL是这么做的,是实现51的编译器非要这么做不可。
ousj 发表于 2012-12-8 17:45 | 显示全部楼层
Keil C51 为了提高代码的效率, 根据 51 处理器的特性. 编译器对函数局部变量的安排进行了处理.
局部变量如果不能分配到 寄存器里, 就放在 RAM 中了
llljh 发表于 2012-12-8 17:46 | 显示全部楼层
对,编译器通过覆盖分析, 可以共享局部变量的地址空间
小小猫咪 发表于 2012-12-8 17:48 | 显示全部楼层
楼主非要让局部变量放到堆栈去吗?
小小猫咪 发表于 2012-12-8 17:48 | 显示全部楼层
可以设定函数为重入类型试试, 不过这样的执行效率会差很多哦
juventus9554 发表于 2012-12-8 17:50 | 显示全部楼层
data = 229.3, 好像这个数值太大了点
kangzj 发表于 2012-12-8 17:50 | 显示全部楼层
是的, 堆栈空间就很小了, 当心堆栈溢出
司徒老鹰 发表于 2012-12-8 17:53 | 显示全部楼层
KEIL也可以产生重入函数(reentrant关键关键字),和标准C类似
dingy 发表于 2012-12-8 17:53 | 显示全部楼层
用的是keil的C编译器的啥版本  用的啥优化级别
renyaq 发表于 2012-12-8 17:55 | 显示全部楼层
是啊,KEIL没有加reentrant的是非重入,没有上下文保护.
pengf 发表于 2012-12-8 17:55 | 显示全部楼层
中断服务程序中 即便不加static 也 会当作static一样看待
栩栩如生 发表于 2012-12-8 17:57 | 显示全部楼层
如果你写了个函数没有被调用 那么KEIL C编译器就会认为你的这个函数是个中断函数
栩栩如生 发表于 2012-12-8 17:57 | 显示全部楼层
所以里面的变量
也是占固定内存的。
 楼主| morrisk 发表于 2012-12-8 17:59 | 显示全部楼层
嗯,大体了解了,结贴了
 楼主| morrisk 发表于 2012-12-8 18:00 | 显示全部楼层
多谢大家了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

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