【问题标题】:Assembly functions have same name with suffix ..0 and ..1汇编函数具有相同的名称,后缀为 ..0 和 ..1
【发布时间】:2021-06-29 19:46:44
【问题描述】:

我正在查看一些已编译代码的程序集,在搜索特定函数时,我发现了两个共享相同名称的函数:

000000000042da10 <my_function..0>:

000000000042dc50 <my_function..1>:

在 C 代码中该函数只有一个声明。我注意到这两个函数在汇编代码中的不同位置被调用,参数略有不同。

这是一个非 gcc 编译器,但我不确定是哪个(我刚刚被告知这不是用 gcc 编译的)。我知道它是用最大优化 (-O3) 编译的,所以我很好奇这是否是编译器针对整数常量参数进行优化并创建函数两次,每次调用一次。

一个程序中存在两个相同功能的原因是什么?

【问题讨论】:

    标签: c compilation compiler-optimization


    【解决方案1】:

    我很好奇这是否是编译器优化整数常量参数并创建函数两次,每次调用一次。

    很有可能。这种优化称为函数克隆,是一种无需内联即可通过函数调用实现持续传播的方法。我无法立即找到全面的参考资料,但Influencing function cloning/duplication/constant propagation in gcc 有一些注释。 (如果你用谷歌搜索,请尝试搜索“函数克隆编译器”或“过程克隆编译器”,否则会有很多关于称为“函数克隆”的分子生物学概念的热门搜索。)

    虽然上面的链接是针对 gcc 的,但其他编译器也支持这个。对-O3 的引用表明您所讨论的编译器可能是clang,它当然具有这样的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多