您的位置:首页 > 其它

加载地址与运行地址

2012-04-01 16:07 169 查看
要是做过uboot开发,就是会遇到过运行地址与加载地址的概念,确实比较抽象与模糊,网上很多解释都是说运行地址就是加载地址,还有就是他们有很大的关系。其实他们根本一点关系都没有,但是很巧合他们很多时候都是相同的,加载地址:就是程序所被加载到RAM的地址,也就是程序在RAM或者norflash的地址,因为程序在硬盘或者nandflash中时不能运行,所以需要加载到RAM中,这个地址就是加载地址,比如s3c2440在RAM的地址0x30000000,所有加载地址就是0x30000000。运行地址:就是程序在编译的时候确定的地址,比如你编译时指定地址为0x10000000,那么你程序就会以这个地址为参考,比如说在距离程序的0x100出定义一条函数fuc(),然后执行A=fuc(),那么这时候就会把0x10000100这个值赋给A。所以就说加载地址与运行地址完全没有关系,但是为什么很多时候加载地址与运行地址要相同,比如说指定了运行地址为0x30000000,但是加载地址为0x00000000,要是执行了上面说的fuc()函数,PC指针就跳转0x30000100,但是去了哪里才发现没有代码,那么程序就会出错。要是程序中没有涉及到地址跳转,和地址取值,或者用的是相对PC值,加载地址和运行定义不相同,程序也可以正常运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: