ZHCUAQ1F july 2015 – april 2023
在5.1.0 版本的编译器工具中,如果没有为对象指定近或 远关键字,编译器将生成对聚合数据的远访问和对所有其他数据的近访问。这意味着不能通过数据页 (DP) 指针访问结构、联合体、C++ 类和数组。
默认情况下,非聚合数据放置在 .bss 段中,并使用来自数据页指针(即 DP,为 B14)的相对偏移寻址进行访问。DP 指向 .bss 段的开头。与用于远数据访问的机制相比,通过数据页指针来访问数据通常更快,并且使用的指令更少。
如果要对聚合数据使用近访问,必须指定 --mem_model:data=near 选项,或使用近关键字声明您的数据。
从.bss 段开头如果有太多的静态和外部数据容纳在15位比例偏移中,则无法使用 --mem_model:data=near。如果DP 相关数据访问无法到达,链接器发出错误消息。
--mem_model:data=type 选项控制数据的访问方式:
--mem_model:data=near | 数据访问默认为 near |
--mem_model:data=far | 数据访问默认为 far |
--mem_model:data=far_aggregates | 对聚合数据的数据访问默认为 far,对非聚合数据的数据访问默认为 near。这是默认行为。 |
--mem_model:data 选项不影响对使用 near 或 far 关键字显式声明的对象的访问。
默认情况下,所有运行时支持数据都定义为 far。
更多有关对数据的近访问和远访问的信息,请参阅节 7.5.5。