小编nas*_*ndx的帖子

为什么clang过度复杂化我的简单因子函数?

考虑一个简单的阶乘函数:

static int factorial(int n) {
    if (n <= 0) return 1;
    return n * factorial(n - 1);
}

int main(int argc, char** argv) {
    return factorial(argc);
}
Run Code Online (Sandbox Code Playgroud)

编译-O2产生了一个非常有趣的区别:

  • g ++ 7.3:我实际上将相同的循环结构转换为具有10-ish指令的汇编.
  • clang ++ 5.0.0:我收到了大量的220多条指令,我不知道发生了什么.

在这里查看比较(编译器浏览器)

在本地构建并比较运行时,简单的g ++二进制文件肯定会在Ubuntu 17.10上对所有值内的运行速度更快(即不会导致溢出).

谁能告诉我,为什么铛是要这么麻烦,并且什么它试图做(和规模和速度不及格)?

c++ x86 assembly compiler-optimization clang++

7
推荐指数
1
解决办法
177
查看次数

标签 统计

assembly ×1

c++ ×1

clang++ ×1

compiler-optimization ×1

x86 ×1