标签:
妨碍优化
编译器安全优化时,会非常小心,编译器会保证在所有可能的情况下都安全才进行优化
第一个妨碍优化的例子就是当指针指向同一个位置
考虑下,如果xp和yp指向同一个位置,情况会怎样?
//假设*xp 和 *yp 都 = 1(同一个位置)
void twiddle1(int *xp,int *yp)
{
*xp += *yp; //1+1 = 2
*xp += *yp; //2+2 = 4
}
void twiddle2(int *xp. int * yp)
{
*xp += 2* *yp; // 1+2 = 3
}
//为了安全优化,编译器不会去优化他
同样的,q和p指向同一个位置,这往往和我们想的不一样(我们认为q和p指向不同位置)
x = 1000;
y = 3000;
*q = y; //q = 3000
*p = x; //q = 1000
t1 = *q; //1000
第二个例子就是函数调用
考虑以下代码
int counter = 0;
int f(){
return counter++;
}
int func1()
{
return f() + f() + f() + f(); // 0+1+2+3 = 6
}
int func2()
{
return 4 * f(); //4 * 0 = 0
}
标签:
原文地址:http://www.cnblogs.com/yingzheng-programming/p/5060476.html