.rodata 和 .rdata 有什么区别

What is the difference between .rodata and .rdata

我看到 .rodata.rdata 都被用作细分。我应该使用哪一个,它们之间有什么区别?

What is the difference between .rodata and .rdata

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

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

但是,为了方便起见(假设大多数人不会对部分做任何特殊的事情),为了确保工具对同一部分使用相同的名称,编译器对某个 OS 使用“正常”的名称作为默认设置,并将假定 Windows 为“.rdata”(因为这对 Windows 是正常的),*nix 克隆为“rodata”(因为这对 Unix 是正常的)。

RODATA 用于 ELF and RDATA is used in COFF. The closest equivalent in Mach-O 将是 __TEXT,__const.