ein*_*ica 4 symbols elf objdump object-files likely-unlikely
在我的objdump -t输出中,我看到以下两行:
00000000000004d2 l F .text.unlikely 00000000000000ec function-signature-goes-here [clone .cold.427]
Run Code Online (Sandbox Code Playgroud)
和
00000000000018e0 g F .text 0000000000000690 function-signature-goes-here
Run Code Online (Sandbox Code Playgroud)
我知道l意味着本地,也g意味着全球。我还知道这.text是目标文件中的一个部分或一种类型的部分,包含已编译的程序指令。但什么是.text.unlikely?假设它是一个不同的部分(或部分类型).text- 有什么区别?
在我的 GCC v5.4.0 联机帮助页中,我发现了以下开关:
-freorder-functions
其中说:
对目标文件中的函数重新排序以提高代码局部性。这是通过对最常执行的函数使用特殊小节“.text.hot”和对不太可能执行的函数使用“.text.unlikely”来实现的。重新排序是由链接器完成的,因此目标文件格式必须支持命名节,并且链接器必须以合理的方式放置它们。
此外,必须提供个人资料反馈才能使此选项有效。有关详细信息,请参阅 -fprofile-arcs。
在-O2、-O3、-Os 级别启用。
看起来编译器是使用优化标志或该二进制文件的开关运行的,并且函数按小节进行组织以优化空间局部性。