不要发了,我知道怎么回事了
怎么没有办法删除自己法的文章呢?
我觉得应该可以的
摘要:我一直以为VC6的执行效率很不错,无论如何这也是微软的产品,在Windows平台下,他的效率应该不会差到哪里去,你是不适也是这么认为的?我还一直以为在VC6下面,通过初始化列表会有一定的性能提高,理论上如此,实际上呢?
源于《Efficient C++》上面的一个例子,当时,他给出了下面的这个例子程序(稍加改动): #include <iostream> #include <ctime> #include <string> using namespace std;
class Timer { public: Timer():start(clock()) { } ~Timer() { cout<<clock()-start<<"ms"<<endl; } 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 
|