小编use*_*572的帖子

优化开关 - 他们真正做了什么?

可能每个人都使用某种优化开关(在gcc的情况下,最常见的是-O2我相信).

但是gcc(以及VS,Clang等其他编译器)在这些选项的存在下真的做了什么?

当然没有明确的答案,因为它很大程度上取决于平台,编译器版本等.但是,如果可能的话,我想收集一套"经验法则".我什么时候应该考虑加速代码的一些技巧?何时我应该把工作留给编译器?

例如,对于不同的优化级别,编译器会在这样的(一点点artifficial ......)案例中走多远:

1)sin(3.141592) //是否会在编译时进行评估,还是应该考虑一个查找表来加速计算?

2)int a = 0; a = exp(18), cos(1.57), 2; //编译器是否会评估exp和cos,尽管不需要,因为表达式的值等于2?

3)

for (size_t i = 0; i < 10; ++i) {
  int a = 10 + i;
}
Run Code Online (Sandbox Code Playgroud)

//编译器是否会跳过整个循环,因为它没有可见的副作用?

也许你可以想到其他的例子.

c++ gcc clang visual-c++

4
推荐指数
1
解决办法
200
查看次数

标签 统计

c++ ×1

clang ×1

gcc ×1

visual-c++ ×1