在我的objdump -t
输出中,我看到以下两行:
00000000000004d2 l F .text.unlikely 00000000000000ec function-signature-goes-here [clone .cold.427]
和
00000000000018e0 g F .text 0000000000000690 function-signature-goes-here
我知道l
意味着本地,g
意味着全球。我还知道.text
是目标文件中包含编译的程序指令的部分或部分类型。但什么是.text.unlikely
?假设它是与.text
不同的部分(或部分类型( - 有什么区别?
在我的 GCC v5.4.0 手册页中,我发现了以下开关:
-freorder-functions
其中说:
对目标文件中的函数重新排序以改进代码 地区。 这是通过使用特殊小节实现的 ".text.hot"表示最常执行的函数和 ".text.unpossible"表示不太可能执行的函数。 重新排序已完成 通过链接器,因此对象文件格式必须支持命名节和 链接器必须以合理的方式放置它们。
此外,配置文件反馈必须可用才能使此选项有效。 有关详细信息,请参见 -fprofile-arcs。
在级别 -O2、-O3、-OS 启用。
看起来编译器是使用优化标志或为此二进制文件切换的,并且函数按子部分组织以优化空间局部性。