ITPub博客

首页 > IT职业 > IT生活 > 不比不知道,一比吓一跳! (转)

不比不知道,一比吓一跳! (转)

原创 IT生活 作者:amyz 时间:2007-11-16 17:42:37 0 删除 编辑
不比不知道,一比吓一跳! (转)[@more@]

不要发了,我知道怎么回事了 

怎么没有办法删除自己法的文章呢?

我觉得应该可以的

 

 

  摘要:我一直以为VC6的执行效率很不错,无论如何这也是微软的产品,在windows平台下,他的效率应该不会差到哪里去,你是不适也是这么认为的?我还一直以为在VC6下面,通过初始化列表会有一定的性能提高,理论上如此,实际上呢?

  源于《Efficient C++》上面的一个例子,当时,他给出了下面的这个例子程序(稍加改动):
  #include
  #include
  #include
  using namespace std;

  class Timer
  {
  public:
 Timer():start(clock()) { }
 ~Timer()  { cout<  private:
 clock_t start;
  };

  class Person
  {
  public:
 Person(const char* s,const char* se) { name=s; sex=se; }
  private:
 string name,sex;
  };

  int main()
  {
 Timer* p=new Timer;
 for(int i=0; i<1000000; ++i)
 Person p("hustli","boy");
 delete p;

 return 0;
  }
  我们称这个版本为版本1,按照我们的常识,在Person构造函数中,没有使用初始化列表,那么,在构造Person对象的时候会2次初始化name和sex,效率自然会下降,而且应该下降很多!所以我们构造了版本2:
  Person(const char* s, const char* se):name(s), sex(se) {}
  首先,我们拿版本1在VC6,win2000下测试十次,取平均值,结果如下:13949.0ms
  然后,我们用版本2在VC6,win2000下测试十次,取平均值,结果如下:14174.3ms
  这个结果,让我郁闷了半天,想不明白,实在是想不明白,怎么会用了初始化列表,效率反而低了?我想可能和string类的实现有关,所以我把这两个版本在dev-C++4.9.5.0下进行了同样的测试,结果如下:
  版本1:3186.5ms
  版本2:3102.4ms
  初看到这个结果,下了我一跳:怎么比VC6速度快了这么多?!
 
  结论:可能Dev-C++更符合我们的预期结果:初始化列表可以提高效率。string的默认构造函数消耗很小。
  疑惑:为什么VC6的结果会如此反常?为什么VC6的效率会如此低?期待高手的解答。

  附:打开最优化就正常了,版本1:2156ms 版本2: 2119ms


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-982743/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7363911