ZHCU947E June 2015 – January 2023
链接器在目标存储器中为每个输出段分配两个位置:即加载位置和运行位置。它们通常是相同的,用户也可以认为每个段只有一个地址。在目标存储器中放入输出段并向其分配地址的过程被称为放置。有关加载位置和运行位置不同的更多信息,请参阅GUID-F5E666B1-566B-4579-A080-AB90BE70E3C3.html#GUID-F5E666B1-566B-4579-A080-AB90BE70E3C3。
如果用户不指示链接器如何分配某个段,它会使用默认算法放置该段。通常,链接器会将段置于所配置存储器中的任何合适位置。用户可以在 SECTIONS 指令中进行定义,覆盖某个段的默认放置位置,并提供有关如何分配的指令。
用户可通过指定一个或多个分配参数来控制放置。每个参数均包含一个关键字、一个等号或大于号(可选)和一个值(可选择置于括号中)。如果加载位置和运行位置不同,则关键字 LOAD 之后的所有参数均适用于加载位置,关键字 RUN 之后的所有参数均适用于运行位置。分配参数包括:
绑定 | 为段分配一个具体地址。
|
指定的存储器 | 将段分配到在具有指定名称(如 SLOW_MEM)或属性的 MEMORY 指令中定义的一个范围内。
|
对齐 | 使用 align 或 palign 关键字指定,该段必须始于一个地址边界。
|
分块 | 使用 block 关键字指定,该段必须置于符合分块系数的两个地址之间。如果段太大,则始于地址边界。
|
对于负载(通常是唯一的)分配,请使用大于号,并省略负载关键字:
.text: > SLOW_MEM
.text: {...}> SLOW_MEM
.text: > 0x4000
如果使用多个参数,则可以按如下方式将它们串到一起:
.text: > SLOW_MEM align 16
也可以选择使用圆括号来提高可读性:
.text: load = (SLOW_MEM align(16))
用户也可以根据输入段规范,确定输入文件中可合并构成输出段的段。请参阅GUID-522CF0D8-44CB-4C2A-959E-07DCE6D9A034.html#GUID-522CF0D8-44CB-4C2A-959E-07DCE6D9A034。