Linux内核段名称中单点与双点的区别及含义咨询
Linux内核段名称中单点与双点的含义差异
内核中段名的点数量并非随机,而是有明确的约定规则,主要用于区分段的分类属性与特殊需求:
1. 单点后缀:通用用途分类
像.data.unlikely、.data.once这类带单点后缀的段,是给基础段(如.data)添加通用用途标签,属于同一大类下的细分场景:
.data.unlikely:存放运行时极少被访问的数据,链接时会被归入冷数据区域,提升缓存命中率.data.once:存放仅需初始化一次的数据,后续通常只做读取操作
这种命名遵循GNU ld的传统习惯,所有带.data.*格式的子段,最终会被链接脚本合并到.data段的对应区域内。
2. 双点后缀:特殊实例标记
而.data..page_aligned、.data..init_task这类双点后缀的段,是用来标记有独立属性要求的特殊段实例:
.data..page_aligned:要求这段数据必须按页对齐,链接时会单独处理其对齐规则,不会和普通.data子段混排.data..init_task:是init_task结构体的专属段,属于.data范畴但有固定的内存布局要求,链接时会被放置到指定位置
双点是内核自定义的命名规则,用来和普通的单点分类后缀做区分,明确这类段需要特殊的链接处理逻辑。
总结
- 单点后缀:基础段的通用用途分类,遵循ld传统命名规范
- 双点后缀:基础段的特殊实例,带有独立的内存属性(如对齐、固定位置)要求,属于内核专属约定
内容的提问来源于stack exchange,提问作者JoheDoe2018
相关产品推荐
相关产品推荐

