打印

不释放局部变量

[复制链接]
1249|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenho|  楼主 | 2017-9-10 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用keil开发c51程序时,出现了不释放局部变量的问题。
沙发
gongche| | 2017-9-10 17:40 | 只看该作者

keil本身就是静态分配局部变量的

使用特权

评论回复
板凳
happy_10| | 2017-9-10 17:42 | 只看该作者
楼上说得对,这点和标准C是有区别的

使用特权

评论回复
地板
bqyj| | 2017-9-10 17:44 | 只看该作者
也是最大区别

使用特权

评论回复
5
tian111| | 2017-9-10 17:46 | 只看该作者
只要没有警告,错误就是正常的

使用特权

评论回复
6
songqian17| | 2017-9-10 17:48 | 只看该作者
LS,不是KEIL是这么做的,是实现51的编译器非要这么做不可。

使用特权

评论回复
7
gongche| | 2017-9-10 17:53 | 只看该作者

Keil C51 为了提高代码的效率, 根据 51 处理器的特性. 编译器对函数局部变量的安排进行了处理.
局部变量如果不能分配到 寄存器里, 就放在 RAM 中了

使用特权

评论回复
8
huanghuac| | 2017-9-10 17:55 | 只看该作者
对,编译器通过覆盖分析, 可以共享局部变量的地址空间

使用特权

评论回复
9
happy_10| | 2017-9-10 17:56 | 只看该作者
楼主非要让局部变量放到堆栈去吗?

使用特权

评论回复
10
tian111| | 2017-9-10 17:58 | 只看该作者
可以设定函数为重入类型试试, 不过这样的执行效率会差很多哦

使用特权

评论回复
11
songqian17| | 2017-9-10 18:00 | 只看该作者
data = 229.3, 好像这个数值太大了点

使用特权

评论回复
12
gongche| | 2017-9-10 18:03 | 只看该作者
是的, 堆栈空间就很小了, 当心堆栈溢出

使用特权

评论回复
13
bqyj| | 2017-9-10 18:05 | 只看该作者
KEIL也可以产生重入函数(reentrant关键关键字),和标准C类似

使用特权

评论回复
14
huanghuac| | 2017-9-10 18:07 | 只看该作者

用的是keil的C编译器的啥版本  用的啥优化级别

使用特权

评论回复
15
songqian17| | 2017-9-10 18:11 | 只看该作者
是啊,KEIL没有加reentrant的是非重入,没有上下文保护.

使用特权

评论回复
16
huwr| | 2017-9-10 18:12 | 只看该作者
中断服务程序中 即便不加static 也 会当作static一样看待

使用特权

评论回复
17
happy_10| | 2017-9-10 18:14 | 只看该作者
如果你写了个函数没有被调用 那么KEIL C编译器就会认为你的这个函数是个中断函数

使用特权

评论回复
18
bqyj| | 2017-9-10 18:17 | 只看该作者

所以里面的变量
也是占固定内存的。

使用特权

评论回复
19
wenfen| | 2017-9-10 18:19 | 只看该作者

不存在释不释放的说法,用户想怎么用就怎么用!

使用特权

评论回复
20
songqian17| | 2017-9-10 18:21 | 只看该作者

不要太武断了

IAR就不是这样的,KEIL也可以不这样

使用特权

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

本版积分规则

748

主题

9853

帖子

5

粉丝