wangzsa 发表于 2022-6-11 12:28

出现了不释放局部变量的问题

在用keil开发c51程序时,出现了不释放局部变量的问题。

kangzj 发表于 2022-6-11 12:31

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

zhanghqi 发表于 2022-6-11 12:37

楼上说得对,这点和标准C是有区别的

chenjunt 发表于 2022-6-11 12:39

也是最大区别

kangzj 发表于 2022-6-11 12:42

只要没有警告,错误就是正常的

chenho 发表于 2022-6-11 12:44

LS,不是KEIL是这么做的,是实现51的编译器非要这么做不可。

renyaq 发表于 2022-6-11 12:49


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

renyaq 发表于 2022-6-11 12:51

对,编译器通过覆盖分析, 可以共享局部变量的地址空间

juventus9554 发表于 2022-6-11 12:56

楼主非要让局部变量放到堆栈去吗?

wangzsa 发表于 2022-6-11 12:58

可以设定函数为重入类型试试, 不过这样的执行效率会差很多哦

huangchui 发表于 2022-6-11 13:00

data = 229.3, 好像这个数值太大了点

supernan 发表于 2022-6-11 13:02

是的, 堆栈空间就很小了, 当心堆栈溢出

lizye 发表于 2022-6-11 13:04

KEIL也可以产生重入函数(reentrant关键关键字),和标准C类似

wyjie 发表于 2022-6-11 13:06

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

zhanghqi 发表于 2022-6-11 13:09

是啊,KEIL没有加reentrant的是非重入,没有上下文保护.

dengdc 发表于 2022-6-11 13:11


中断服务程序中 即便不加static 也 会当作static一样看待

stly 发表于 2022-6-11 13:13

如果你写了个函数没有被调用 那么KEIL C编译器就会认为你的这个函数是个中断函数

heweibig 发表于 2022-6-11 13:16


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

jiaxw 发表于 2022-6-11 13:19

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

liliang9554 发表于 2022-6-11 13:21


不要太武断了

IAR就不是这样的,KEIL也可以不这样
页: [1] 2
查看完整版本: 出现了不释放局部变量的问题