GCC如何决定输出汇编函数的顺序?

14

浏览我项目中C文件的汇编代码时,我发现函数在汇编输出中的顺序与它们在源文件中出现的顺序不同。这种重新排序的目的是什么,GCC又使用了哪些启发式算法来决定顺序呢?(这只是保存函数的数据结构产生的副作用吗?)这不是-freorder-functions,因为我没有使用-fprofile-arcs

1个回答

12

在过程间优化的后续阶段,采用了调用图的自底向上遍历来进行排序。您看到的就是这种排序方式。有一篇论文介绍了GCC这部分原始设计的相关内容,链接在这里(这篇论文比较久远,这些内容首次出现在GCC 3.4版本中)。

您可以使用-fno-toplevel-reorder(或者对于较早的GCC版本,使用-fno-unit-at-a-time)来防止重新排序,但这会禁用一些相关的优化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接