nas*_*ndx 7 c++ x86 assembly compiler-optimization 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 ++二进制文件肯定会在Ubuntu 17.10上对所有值内的运行速度更快(即不会导致溢出).
谁能告诉我,为什么铛是要这么麻烦,并且什么它试图做(和规模和速度不及格)?
谁能告诉我为什么 clang 会遇到这些麻烦,以及它试图做什么(并且在大小和速度上都失败了)?
它试图通过向量化代码来最小化测试和分支操作的数量。
尺寸上肯定是失败的。至于它是否在速度上失败,你对它进行了基准测试吗?
如果添加命令行选项,gcc 也会执行相同的操作-ftree-vectorize。
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |