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

Ben*_*son 13 c gcc

通过程序集GCC为我的项目中的C文件生成,我注意到函数不会按照它们在源文件中出现的顺序在汇编中输出.这次重新排序的目标是什么?GCC使用什么启发法来决定订单?(它只是保存函数的数据结构的工件吗?)这不是-freorder-functions,因为我没有使用-fprofile-arcs.

Mat*_*ery 9

过程间优化阶段的后期部分使用调用图的自下而上遍历; 那是你看到的顺序.有一个关于GCC的这部分原设计的纸张这里(来自前一阵子,这个东西第一次出现在GCC 3.4).

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