首页 > 解决方案 > 汇编函数具有相同的名称,后缀为 ..0 和 ..1

问题描述

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

000000000042da10 <my_function..0>:

000000000042dc50 <my_function..1>:

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

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

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

标签: ccompilationcompiler-optimization

解决方案


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

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

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


推荐阅读