首页 > 试题广场 >

关于程序的加载地址和运行时地址,以下说法正确的是()

[不定项选择题]
关于程序的加载地址和运行时地址,以下说法正确的是()
  • 运行时地址和加载地址不一定相同
  • 运行时地址和加载地址是程序编译时决定的
  • 运行时地址和加载地址时程序运行时决定的
  • 运行时地址和加载地址时程序链接时决定的
加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。
https://blog.csdn.net/wangliang888888/article/details/54952580
发表于 2019-07-17 22:03:41 回复(2)
一、程序的加载地址

程序被加载到RAM中的地址;这个不能由编译器决定、也就是不能由编译参数决定!由该模块的调用者决定!

因为程序在nandflash中不能运行,所以需要加载到RAM中。

一般我们必须在运行该程序前,将程序加载到运行地址处。

即在代码设计时:

在跳转至运行地址变量前,必须先完成代码搬运部分工作。

二、程序的运行地址

这个地址可以由编译器的编译参数来决定。

目标文件中各功能块(函数或变量)的相对地址:只是一个偏移量,它在编译阶段已经确定;

程序运行绝对地址:整个程序运行时的首地址,在连接阶段才确定。

说明:程序、包括其中各个功能块的绝对地址,是将连接阶段给的首地址加上编译阶段确定的偏移量相加后的值。

eg:

armcc -c hello.o hello.c  //hello.o中确定了偏移量
armlink hello --ro_base 0x30000000 hello.c  //hello中确定了首地址

结论:加载地址和运行地址没有任何关系!但如果该模块不支持PICARM位置无关代码设计,即位置无关代码、则必须将加载地址设置为和运行地址相同,反之、则没有这个约束。
————————————————
版权声明:本文为CSDN博主「雷古拉斯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tankai19880619/article/details/8909495
发表于 2020-04-02 14:45:57 回复(0)
运行时地址和加载地址不一定相同
运行时地址和加载地址是程序链接时决定的。
发表于 2021-06-25 19:42:19 回复(0)