※ 引述《gigigigi (gigigigi)》之铭言:
: 何谓Binding
: Def: 决定程式执行的起始位址。
: 即:程式要在内存的哪个地方开始执行。
: 可能的Binding时期有三个:
: 1. Compiling Time
: 2. Loading Time
: 3. Execution Time
: 3-1 : Dynamic Binding
: 3-2 : Dynamic Loading
: 链接器( Linker )是把不同部分的代码和数据,收集、组合成为一个可加载、可执行的文
: 件。
: 加载器( Loader )把可执行文件从外存装入内存并进行执行
: MMU : 分段 + 分页
: 分段 - 逻辑位址 -> 线性位址
: 分页 - 线性位址 -> 实体位址
: _________________________________________________________________________________
: 我被上面情况给搞的有点乱 , 有下面几点疑惑
: 1.
: Binging 三个时期程式位址都算是虚拟位址?
是的 除非你玩的是没MMU的处理器
: Compiling Time 位址是由编译器计算出来?
不算是 其实是由连结器那边设定的
: Loading Time 是由 加载器 计算出位址?
: Execution Time : 位址是 Local Address + Base Register ?
小弟不才 可能不完全正确 但其实元PO问的事情没那么复杂
用一句话回答的话就是:把一切交给虚拟位址就对了!
基本上会考虑到实体位址的就只有一位:核心
包括编译器连结器在内 都是用虚拟位址在思考
而我刚刚讲的 编译完的位址 其实是由叫做linker script的东西设定的
这些script是ld在编译的链结时期读取的
(script路径可由 ld