.rodata 和 .rdata 有什么区别

问题描述

我已经看到 .rodata.rdata 都被用作段。我应该使用哪一种,它们之间有什么区别?

解决方法

.rodata 和 .rdata 有什么区别

主要(唯一?)差异在于文化。

对于链接器和加载器(以及目标文件格式),您可以使用任何您喜欢的名称。只要(在链接期间)应该在同一部分中的内容对该部分使用相同的名称,并且该部分的属性得到充分描述(例如使用链接描述文件,包括用于操作系统)。如果您愿意处理额外的麻烦,也没有什么可以阻止您拥有多个单独的部分(例如,可能使用“rdata_initialization”、“rdata_frequently_used”和“rdata_rarely_used”来改善缓存局部性)。

但是,为了方便(考虑到大多数人不会对节做任何特殊的事情),为了确保工具对同一节使用相同的名称,编译器使用特定操作系统的“正常”作为默认值,并且将假设 Windows 使用“.rdata”(因为这对 Windows 来说是正常的)和“rodata”用于 *nix 克隆(因为这对 Unix 来说是正常的)。

,

RODATA 用于 ELFRDATA 用于 COFFMach-O 中最接近的等价物是 __TEXT,__const