您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Visual C >> 正文

Google
全面比较Delphi和Visual C++(玉笛书生)
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 12:57:00

                       全面比较Delphi和Visual C++

                               --------玉笛书生

       偶然来找一个文件,却发现这里关于vc++和delphi的讨论很是激烈。看了大家写的一些文章,觉得有些看法正确,有些就很偏颇甚至错误(也许无知?很抱歉我这样说:-)。我无意与任何人争,更愿意把这看成是技术上的讨论。应该本着公正,不带偏见的态度(这并不意味着非要平分秋色,一切应以事实为准)。我用过除tp1以外的所有版本的turbo pascal,所有版本的turbo c/borland c++,所有版本的delphi和c++ builder;以及msc 5.0/6.0,msc/c++ 7.0和visual c++.2/5.0。不敢说有多高的水平,至少也算有一点经验吧。下面就谈一下我的看法。
1. 编译器
应该说borland的编译器是最好的。因为borland有全世界最好的编译器开发组(虽然anders hejlsberg离开了)。从技术上来讲,borland领先任何竞争对手至少2~3年。
一 。
一般来说,borland的编译器总是能生成更小的代码并且通常(并不是在任何情况下)更快的代码。紫云英、曾登高在文章中说vc++编译的程序小,这其实是使用了动态连接的结果。m$把vc++的运行库(msvcrt*.dll, msvcp*.dll, mfc*.dll, 你看看这些文件加在一起有多大)在安装windows时就放在了system/system32目录中了。两位说“协商接口”的问题,恐怕是对某些英文文章的理解错误。m$就是不愿意在windows中带上其他公司的运行文件,没有技术上的原因。其实delphi/c++ builder不论在动态连接或静态连接的情况下,生成的程序都要比vc++的小。比如mdi的例子程序:在delphi/c++ builder中选new ... | projects |mdi application,在vc++中用mdi app wizard;生成的程序功能是非常类似的。
下面是比较结果:
(delphi打开优化,c++ builder使用最大速度优化,vc++ 5使用最小代码优化)

delphi 3 delphi 5 c++ builder 5 vc++ 5
dynamic link 21k 35k 44k 70k
static link 253k 398k 467k 490k

凡是使用了应用类库的程序(不管是mfc,owl,vcl以及新的clx框架)都要比不使用的大不少。这是因为目前的智能连接(smart link)技术还只能针对全局变量/过程,而不能用于对象结构。哪怕你只使用了某个类(或被这个类间接引用)的一个属性或方法,这个类以及它所引用的所有类都全部被连接到exe中。目前所有的编译器都没有解决这个问题。
(ps: 其实能生成最小代码(真编译)的高级语言编译器是turbo pascal,不信你写程序比较一下:
program test;
begin
writeln('hello, world.');
end.
end.
生成的exe不到1.5k。而同样的c程序:
#include
main()
{
printf("hello, world. ");
}
最精悍的c/c++编译器生成的代码也有6k。
)

那么几个编译器生成的代码质量又如何呢?
举一个例子,比如我们在编程时经常用到的for循环语句:
(1) object pascal:
procedure foo;
var
i, j: integer;
begin
for i := 0 to 15 do j := j + i;
end;
(2) c++
void foo(void)
{
int i, j;
int i, j;
for (i = 0; i < 16; i++) j = j + i;
}

delphi 3生成的代码(打开优化): 字节数 时钟周期
00424aa9 33c0 xor eax,eax 1
00424aab 40 inc eax 1
00424aac 83f810 cmp eax,0x10 1
00424aaf 75fa jnz -0x06 0 (可并行)
-----------------
8 3
c++ builder 5生成的代码(最大速度优化):
00401535 33c0 xor eax,eax 1
00401537 40 inc eax 1
00401538 83f810 cmp eax,0x10 1
0040153b 7cfa jl -0x06 0 (可并行)
-----------------
8 3

visual c++ 5生成的代码(最大速度优化):
27: for (i = 0; i < 16; i ++)
00401205 mov ecx,dowrd ptr [j] 1
00401208 xor eax,eax 0 (可并行)
28: {
29: j = j + i;
0040120a add ecx,eax 1
0040120c inc eax 1
0040120d cmp eax,10h 1
00401210 jl foo(0x0040120a)+0ah 0 (可并行)
00401212 mov dword ptr [j],ecx 0/1 (取决于上一条指令的
分支预测情况)
30: };
-----------------
16 4.2 (假定分支预测准确度
80%)

vc++ 5的最小代码优化生成也有11个字节:
27: for (i = 0; i < 16; i ++)
00401205 xor eax,eax 1
28: {
29: j = j + i;
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"。

[1] [2] [3] [4] [5] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

相关文章

没有相关文章

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号