Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

克隆函数

编译器能够识别可以对其执行额外优化的函数调用,例如所传递的部分参数是常量的函数调用。当编译器识别出它可以优化的特定调用时,会创建该函数的副本(称为克隆)并生成优化代码。

在带注释的源代码中,编译器注释将指示是否创建了克隆函数:

0.       0.       Function foo from source file clone.c cloned, 
                   creating cloned function _$c1A.foo; 
                   constant parameters propagated to clone
0.       0.570     27.    foo(100, 50, a, a+50, b);

注 -  在实际的带注释的源代码显示中,编译器注释行并不换行。

克隆函数名称是标识特定调用的改编名称 (mangled name)。在前面的示例中,编译器注释指示克隆的函数名称为 _$c1A.foo。在函数列表中,该函数显示为:

0.350     0.550     foo
0.340     0.570     _$c1A.foo

每个克隆函数都具有不同的指令集,因此带注释的反汇编列表单独显示克隆函数。 这些函数与任何源文件都没有关联,因此其指令也与任何源代码行号无关。以下示例显示了某个克隆函数的带注释的反汇编代码的前几行。

0.       0.           <Function: _$c1A.foo>
0.       0.           [?]    10e98:  save        %sp, -120, %sp
0.       0.           [?]    10e9c:  sethi       %hi(0x10c00), %i4
0.       0.           [?]    10ea0:  mov         100, %i3
0.       0.           [?]    10ea4:  st          %i3, [%i0]
0.       0.           [?]    10ea8:  ldd         [%i4 + 640], %f8