Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133957
  • 博文数量: 94
  • 博客积分: 1572
  • 博客等级: 上尉
  • 技术积分: 925
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-04 00:03
文章分类

全部博文(94)

文章存档

2011年(94)

我的朋友

分类: C/C++

2011-04-07 14:41:54

大家都知道现在的所有编译器都会对用户代码进行优化,尽量保证最高性能的代码。
但是没有任何的现象能证明它对代码做了优化处理(也许是大家根本没有关注过)。
我今天无意间发现了代码调试的一个“问题”:

在vc里建立个标准C的工程,输入如下代码

  1. void main()
  2. {
  3.   int a;
  4.   a=0;
  5.   if (a == 0)
  6.   {
  7.   return;
  8.   }
  9. }

然后用F10单步跟踪,你会发现执行完 a=0 这句后就直接跳到了程序结尾的" } "处 。
而 if (a == 0) 根本就没有执行。
看看代码的逻辑, 当执行完a=0后,无论下面的条件是否成立执行的结果是一样的,return的作用是到直接程序结尾,跳过判断的话同样是到程序结尾,所以 if 直接被和谐了。

代码修改该成

  1. void main()
  2. {
  3.   int a;
  4.   a=0;
  5.   if (a == 0)
  6.   {
  7.     a=0;
  8.     return;
  9.   }
  10. }

这样就不同了, 是否进入条件判断就会影响到执行不同效果的代码了。

其实我觉得优化的还不够,对于后面2种情况,明显的只有一个赋值语句,而且所赋的值就是条件里的原值,编译器如果仍然把他们和谐掉才牛x呢。不过这是我想当然的效果,可能实现上有不可逾越的鸿沟。

阅读(458) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~