1

在我的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- 有什么区别?

4

1 回答 1

4

在我的 GCC v5.4.0 手册页中,我找到了以下开关:

-freorder-functions 其中说:

重新排序目标文件中的函数以提高代码局部性。这是通过对最常执行的功能使用特殊的小节“.text.hot”和对于不太可能执行的功能使用“.text.unlikely”来实现的。重新排序由链接器完成,因此目标文件格式必须支持命名部分,并且链接器必须以合理的方式放置它们。

此外,必须提供配置文件反馈才能使此选项有效。有关详细信息,请参阅 -fprofile-arcs。

在 -O2、-O3、-Os 级别启用。

看起来编译器是使用优化标志或该二进制文件的开关运行的,并且函数按小节组织以优化空间局部性。

于 2020-02-03T21:38:53.833 回答