分类: LINUX
2010-07-10 20:54:39
CSAPP上的例子:
1, 内存别名:
考虑下面2个函数:
void twiddle1(int *xp, int *yp)
{
}
void twiddle2(int *xp, int *yp)
{
}
似乎twiddle1和twiddle2的功能一样, 但是考虑 *xp和*yp指向同一地址的情况, 会导致执行不同的结果, 所以编译器不会对twiddle1按照twiddle2的性能去优化, 此所谓 内存别名导致的程序优化阻碍
2,函数副作用:
考虑下面2个函数:
int f(int);
int func1(x)
{
}
int func2(x)
{
}
初看起来, 似乎函数1和2结果相同, 但是考虑如下情况:
int count
int f(int x)
{
}
由于函数f修改了全局变量的值, 导致func1和func2会有不同的结果, 编译器也不会基于func2去优化func1,此所谓函数副作用导致的优化阻碍