Oracle Solaris Studio 12.2:性能分析器

尾部调用优化

只要特定函数执行的最后一个操作是调用另一个函数,编译器就可以执行一种特定的优化。被调用方可重用来自调用方的帧,而不是生成新的帧,而且可从调用方复制被调用方的返回地址。此优化的动机是减小堆栈的大小,以及(在 SPARC 平台上)减少对寄存器窗口的使用。

假定程序源代码中的调用序列与如下所示类似:

A -> B -> C -> D

BC 进行尾部调用优化后,调用栈看起来好像是函数 A 直接调用函数 BCD

A -> B
A -> C
A -> D

也就是说,调用树被展平。使用 -g 选项编译代码时,尾部调用优化仅发生在编译器优化级别 4 或更高级别上。在不使用 -g 选项的情况下编译代码时,尾部调用优化发生在编译器优化级别 2 或更高级别上。