阅读 GCC 为我的项目中的 C 文件生成的程序集,我注意到函数在程序集中的输出顺序与它们在源文件中出现的顺序不同。这种重新排序的目标是什么?GCC 使用什么启发法来决定顺序? (这只是数据结构保存函数的产物吗?)这不是-freorder-functions
,因为我没有使用-fprofile-arcs
.
过程间优化阶段的后续部分使用调用图的自底向上遍历;这就是您看到的顺序。有一篇论文是关于GCC这部分的原始设计的here http://www.linuxsymposium.org/archives/GCC/Reprints-2004/Reprint-Hubicka-GCC2004.pdf(不久前;这个东西第一次出现在 GCC 3.4 中)。
您可以使用以下方法防止重新排序-fno-toplevel-reorder
(or -fno-unit-at-a-time
对于较新版本的 GCC),但这会禁用一些相关的优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)