左值编译时可知 与 编译时确定代码地址 等的关系?
近期遇到较多的左右值问题,以前不曾深思,现在略作思考,有些疑问,水平有限,幼稚可笑,还望大家指教,谢谢。
疑问基于的事实:
1.有这个说法:左值编译时可知;
2.实验发现,对于一个确定的程序,反汇编时,同一条语句对应的内存位置不相同!
(至少5次实验,同一条C语言语句对应汇编语句,地址后4位每次都相同,前4位每次都不同,例如:
001B1380
011E1380
00EA1380
003C1380
00981380)
疑问:
1.既然每次的地址不是定值,怎么又说“左值编译时可知”呢?怎么个机制?
2.对于事实2,地址后4位每次相同是巧合还是必然?为什么?
(各位能听懂我说的不?没听明白烦请说明,现在有事离开,不能马上回复,抱歉。)
---------------------------------------------------------
向赵老师道个歉,如前一个帖子所说,我的确没有那么尝试过。
看了您的发言,我尝试了一下,也的确如您所料,基本看不懂。现在重点是C语言本身,以后再回到最最底层去吧,呵呵。
就不特意另立一帖了,毕竟还要点面子不。您批评得很正确,我接受,谢谢您。
(再有,貌似我这里看CSDN又抽了,此帖不知能否顺利发出,o(︶︿︶)o 唉)
[解决办法]
1.“左值”(l-value)实际上是“存储(可写)地址”,编译时是可以确定的。
2.这个与程序加载及段有关?
[解决办法]
正如2楼所说,左值的 存储地址 编译时确定,而这个地址 不是绝对地址,类似于一个偏移地址
所以第2个问题,地址后4位不变,就是体现了这一点
而前4位的变化,就是绝对地址带来的影响了