是否有一个编译器(用于GCC和/或Clang)设置会限制已编译函数的长度?

Is there a compiler (for GCC and/or Clang) setting that limits compiled function length?

对于我正在处理的程序,我想限制每个已编译函数的长度,以便在达到功能边界2所需的distance1上提供硬上限。在GCC或Clang中(或者实际上是任何编译器框架/工具链)中是否有一个选项可以启用功能拆分来执行此操作?还是有我不知道阻止的限制?

1这里的距离定义为小于功能的任何离散单位-即指令数量,基本块数量,乔恩·斯凯特(Jon Skeet)头3上的白发数量等。

2我将功能边界定义为"将新堆栈框架推入CPU堆栈的位置"。据我了解,这几乎完全是在调用新函数时发生的(偶尔对于本身不调用其他函数的叶子函数除外)。

3这只是个玩笑。我们都知道,乔恩·斯凯特(Jon Skeet)的头发不会变白-只是垃圾收集,并且实例化了一根新头发,就像新头发一样。


我不知道有任何编译器开关,但是您不需要。使用nm

可以轻松获得文本段中符号的大小

1
2
$ nm -AP a.out|awk '$3=="T" {print $2"" $5}'
main 000000000000005b

请注意,这需要解压缩的可执行文件。许多nm实现都提供了其他选项,例如用十进制数字代替十六进制,这使得对数字的比较容易一些。将其转换为脚本以输出大于X的函数:-)