找回密码
 立即注册
楼主: zhangz***

遇到局部变量被意外修改的问题,发现是编译器给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行的实验数据,我也是迷惑不解,但是没时间去研究了。
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 16:39 , Processed in 0.085031 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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