Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1325568
  • 博文数量: 281
  • 博客积分: 8800
  • 博客等级: 中将
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 22:31
文章分类

全部博文(281)

文章存档

2013年(1)

2012年(18)

2011年(16)

2010年(44)

2009年(86)

2008年(41)

2007年(10)

2006年(65)

我的朋友

分类: LINUX

2010-07-10 20:54:39

CSAPP上的例子:

1, 内存别名:

考虑下面2个函数:

void twiddle1(int *xp, int *yp)

{

     *xp += *yp;

     *xp += *yp;

}

 

void twiddle2(int *xp, int *yp)

{

     *xp += 2 * *yp;

}

 

似乎twiddle1和twiddle2的功能一样, 但是考虑 *xp和*yp指向同一地址的情况, 会导致执行不同的结果, 所以编译器不会对twiddle1按照twiddle2的性能去优化, 此所谓 内存别名导致的程序优化阻碍

 

2,函数副作用:

考虑下面2个函数:

int f(int);

 

int func1(x)

{

   return f(x) + f(x) + f(x) + f(x);

}

 

int func2(x)

{

   return 4 * f(x);

}

初看起来, 似乎函数1和2结果相同, 但是考虑如下情况:

int count = 0;

 

int f(int x)

{

 return count++;

由于函数f修改了全局变量的值, 导致func1和func2会有不同的结果, 编译器也不会基于func2去优化func1,此所谓函数副作用导致的优化阻碍

阅读(1931) | 评论(0) | 转发(0) |
0

上一篇:bit endian & little endian

下一篇:智力测试

给主人留下些什么吧!~~