【发布时间】:2015-09-15 19:19:34
【问题描述】:
对于我正在处理的程序,我想限制每个编译函数的长度,以便提供到达函数所需距离1 的硬上限边界2。 GCC 或 Clang(或实际上任何编译器框架/工具链)中是否有一个选项可以启用函数拆分来执行此操作?或者是否存在我不知道的限制?
1 此处的距离定义为任何小于函数的离散单位 - 即指令数、基本块数、Jon Skeet 头上的白发数3等。
2 我将函数边界定义为“将新堆栈帧推入 CPU 堆栈的位置”。据我了解,这几乎只发生在调用新函数时(偶尔会出现自身不调用其他函数的叶函数)。
3 这只是个玩笑。我们都知道 Jon Skeet 的头发并没有变灰 - 它只是垃圾收集并实例化了新头发,就像新的一样。
【问题讨论】:
-
其中一个限制是,当谈论指令数变得有意义时,重构代码已经太晚了(或者,如果您愿意,可以使用这种重构的数据结构)有意义不对应于可以计算的指令)。无论如何,什么是“功能边界”?无偿地拥有更多的功能边界有什么好处?
-
@PascalCuoq 我在问题中添加了我对“函数边界”的定义。至于为什么-有一个长而短的答案;简短的回答是我正在开发一个动态运行时工具,该工具可以在程序执行的任何时候使用,但在下一个函数边界处停止(如问题中所定义)。我想在到该边界的距离上尽可能地提供一个上限。您提到的限制是有道理的;是否可以将限制基于其他标记(即基本块的数量)?
标签: gcc clang llvm compiler-optimization