read-only与read only数据段有何区别?解析nm工具n与R/r符号差异
read-only 与 read only 数据段的区别(对应nm中n和R/r符号差异)
你在GCC Binutils的nm工具文档里遇到的n和R/r符号描述差异,其实是文档措辞模糊导致的,实际二者对应不同的只读数据细分段:
- R/r符号:对应标准的
.rodata段,这是最常见的只读数据段,用来存放字符串常量、被const修饰的全局/静态变量等通用只读数据。 - n符号:对应编译器生成的细分只读子段,比如
.rodata.str1.1这类专门用于存储字符串的只读段,是编译器为了优化字符串存储、提升访问效率而拆分出来的专用只读段。
从内存属性来看,这两类段都是只读的,操作系统会把它们映射为不可写的内存页,程序运行时都无法修改其中的数据。nm用不同符号区分,只是为了标识这些符号所在的只读段的具体细分用途,方便开发者定位符号的存储细节。
手册里的描述差异(冠词、连字符)只是措辞问题,并非本质区别,谷歌搜索难区分是因为这类细节属于Binutils的底层实现细节,需要结合工具源码或更深入的编译原理文档才能明确。
内容的提问来源于stack exchange,提问作者llwafelll
相关产品推荐
相关产品推荐

