00401207 add dword ptr [j],eax 1
0040120a inc eax 1
0040120b cmp eax,10h 1
0040121e jl foo(0x00401207)+7 0 (可并行)
30: };
-----------------
11 4
注:
(1) delphi/c++ builder的结果是用turbo debugger直接反汇编的,vc++ 5的结果是从集成环境的源级调试得到的。
(2) 时钟周期数以pentium处理器为例,实际上,对于没有并行执行单元的cpu(比如
386/486和nx586等)vc++ 5生成的代码速度还要更慢一些。
(3) 分支预测准确度源自intel的"pentium optimization reference"。不过与具体程序密切相关,一般来说程序中的条件转移指令越密集则分支预测准确度越低。
可以看出,delphi/c++ builder的这段程序有1~1.2个时钟周期的优势。这主要是因为delphi/c++ builder的编译器比较智能,根本不编译无用的废语句。
(有趣的是,对于这段程序而言,vc++ 5的最大速度优化反而不如最小代码优化生成的代码运行速度快。)
不要以为1~1.2个时钟周期不算什么,整个程序的快与慢就是这样一个个时钟周期积累
出来的。而且就这几条指令而言相当于快25%~28.6%,是非常可观的数字。
我没有用vc++ 6测试(我从vc++ 5以后不再使用vc了,因为c++ builder 5能完全兼容vc --- 这种兼容性从c++ builder 3开始就有了,不过一开始并不完善),不知道是否有改进。有人有兴趣的话请测试一下。
有兴趣的话,可以去jake’s code efficiency challenge(http://www.xnet.com/~johnjac)
看一看。那有代码运行性能挑战。目前delphi/c++ builder在6项测试中保持5项领先。
(ps:delphi 2就曾在1996年的pc week的性能测试中击败过vc++ 4.2)
文章来源于领测软件测试网 https://www.ltesting.net/