找回密码
 立即注册
楼主: zhangzhonghua

遇到局部变量被意外修改的问题,发现是编译器给2个局部变量分配了相同的地址?

[复制链接]

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-30 23:38:56 | 显示全部楼层
杨*** 发表于 2023-12-30 13:50
二论  楼主10楼程序造假 楼主在59楼说:“1楼的程序,是没问题的,当时用函数名描述,是因为我匆忙且当时根 ...

二论这里的东西,你多次强调符合语法,编译通过。我只能回答,我只是简化、示意,是给人看的,人能基本正确理解就行,不是给机器去编译的,没必要抠了。
回复 支持 反对

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-31 00:08:37 | 显示全部楼层
杨*** 发表于 2023-12-30 20:57
三论  楼主38楼实验结果造假 (1)从11楼起到37楼,楼主和网友们交流了在C51编译器中用维护函数调用树的 ...

三论这里的东西,你研究得很细,我也是有疑惑的,但我只是开发产品的,问题解决完就得干别的事情去了,没能再深入去研究编译器的行为了。你能研究,我跟着看看。
今天晚了,只对其中1个问题讨论。
“消除了局部变量地址重叠的现象,那么第4行里data/xdata列的实验结果数字之一就一定会比第2行的大”。这个不对,为什么一定大?你认为是是重叠区 _XDATA_GROUP_ 一定大?我觉得不一定(对比了下MAP文件,重叠区 _XDATA_GROUP_ 长度一样)。这就牵涉到重叠区大小是怎么确定的问题。
回复 支持 反对

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2023-12-31 09:06:13 | 显示全部楼层
杨*** 发表于 2023-12-30 10:54
楼主你是慌不择言吧?你说“我这边,实际程序就有这个问题,但这是商业程序,价值是2023元的10倍不止,不 ...

这里没有一个疑问是我看了想回复的。
不过,“你不知道C51编译器对C语言程序编译后输出的MAP文件中有每个函数局部变量的地址吗?两个局部变量地址是否相同直接就看出来了,还用得着仿真单步跟踪吗?”
这个倒是我之前没想到的,感谢这个反问式指点,学到了。
回复 支持 反对

使用道具 举报 送花

4

主题

52

回帖

160

积分

注册会员

积分
160
发表于 2024-1-2 09:39:31 | 显示全部楼层
杨*** 发表于 2023-12-30 20:57
三论  楼主38楼实验结果造假 (1)从11楼起到37楼,楼主和网友们交流了在C51编译器中用维护函数调用树的 ...

第5行的实验数据,我也是迷惑不解,但是没时间去研究了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-04-30 13:36:04
已绑定手机

34

主题

171

回帖

1177

积分

金牌会员

积分
1177
发表于 2024-11-3 23:09:56 | 显示全部楼层
看了2边,看看高手过招,我能不能学到一些有用的东西
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:37 , Processed in 0.170704 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表