测试评价了一些非主流编译器……极度杯具

jackyjkchen 2009-12-23 03:51:31
导师的任务完成的差不多了,考研也复习差不多了,这两天有空把Windows下能跑的十几种编译器编译选项、优化效果等研究了一下。

每种编译器的编译、链接选项我都从头到尾看了,收获挺不小的,以以前使用VC和gcc的经验,各种其他编译器的编译连接选项都不算晦涩了,基本上各种编译器分别适合不同情况的最优化编译选项组合能排出来了。不过对于VC和gcc之外的编译器,我的感觉除了失望基本没有其他的想法……

主流编译器就是VC和gcc两种,其他的或是非主流、或是过气的老编译器,而这些非主流和过气编译器里,过气编译器的表现明显强于非主流的开源编译器。

PS:自带IDE比较强大的就用他们自己的,否则就用codeblocks配置一个环境,主要是测试编译选项比Makefile方便。

先从体积优化说起,这个非常直观,坊间谣言总是说微软在编译器中动了手脚加了垃圾,VC的程序最大,其实恰恰相反(坊间很多对于微软的谣言,实在不太理解,可能这就是强者效应吧,垄断组织、强权政府的谣言总是很多,但往往失实……),VC的体积优化是最强的,用简单程序测试,其生成代码是最紧凑的,垃圾也是最少的,唯一算得上垃圾的也就是那个dos头后面的rich signature,几十字节,非微软的编译器都没有。VC和gcc是仅有的两个能将helloworld小程序编译到500多字节的编译器,其他的编译器都在1KB以上,普遍在3~5KB,也是动态链接API或CRT,也是调整了entry和alignment,但是这些个非主流编译器都会放大量的垃圾信息在exe文件里,甚至于c源文件的名称、路径、自定义函数名这种东西也会编译进去,链接还去不掉这些,运行库、API导入库也非常不合理,明明只调用一个库函数或API,连进去的东西一大堆,明明没有使用运行库,也逼着我连接crt(我的习惯是先禁用默认库,再将需要的库连接,这样非常清晰),不像VC和GCC指定入口点之后可以完全抛弃运行库。体积测试,最终的第一名是VC5.0,编译出来的和MASM win32汇编一样大,并且其在效率测试里也仅次于gcc和vc6排第三………………呵呵,VC5是VC现代化的起点,为后来的VC定了形的,由于效率测试中普遍使用的是crt,crt库偏慢(有许多安全增强,并且全部是多线程安全的)的VS2003,VS2005、VS2008就落后于VC5/6和gcc了,不过仅仅在0.5~3%……

废话了那么多,其实现在才是正题,评价一下几个非主流/过气编译器吧。

openwatcom:曾经的dos游戏专属编译器watcom死掉后的开源版本,虽然版本号只有0.9.25,但是却是从watcom 11.0发展而来,实际上在非主流编译器里openwatcom是最成熟的,也是最可靠地,无论效率优化测试,体积优化测试表现都非常号,效率基本和VS03齐平,比VS05和VS08快,相信也是watcom一向的长项——crt库的功劳,体积测试api版helloworld只有2kb,printf版1.5kb,和VC不指定alignment是基本一样,openwatcom的alignment理论上也可以很小,但是只有默认的512能正常运行……256都报错,VC可是能指定到4的!相对于dos时代的效率之王,openwatcom褪色不少,但相对于其它的非主流编译器,openwatcom是很优秀的,值得一提的是,他的自带ide很不错,编辑功能虽然不强,但是编译、连接选项却很全面,我这种深受VC影响的人,特别喜欢这样的IDE,可以直接替代编译器的文档,而即便如此openwatcom的文档也是非主流里最丰富的。

borland C++:3.0版是dos时代使用最广泛的编译器,除了本身很优秀,一半的功劳来自于它的IDE,因为从纯效率来说不如当时的watcom,但是用户界面却友好了许多,虽然他是16位的,生成的也是16位程序,但效率测试仅比主流的VC、gcc慢10%左右(这是不是也说明Windows 16位虚拟机很高效,我的感觉就像.net一样,启动慢,但运行极快)。当时与borland C++竞争的主要是VC 1.x系列(而watcom一般用来做最后生成产品,VC和BC才是开发中使用的),VC 1.52的exe比BC几乎慢了一倍,编译成com文件速度倒是差不多……3.0版之后,BC迅速走下坡路,4.x版失败不用多说,5.5版被某些人吹得像神(就因为免费?),但现实是——和同时代的VC6相比,效率和体积优化都被压制了……当然,总体上来说,5.5版虽然不神奇,但仍算得上一款优秀的编译器,毕竟标准的支持比VC6要好得多,算是和VC6平手吧。再之后,borland就开始吃老本了,后面的c++ buider我基本无视…当然微软出了VS03之后,也在吃老本,看VS2010的表现了。

lcc:貌似是个人或小团体作品?如果真是那样,也不过分苛求,跑同样的代码消耗的时间大约是主流编译器的1.5倍,差距很明显,而且它那个IDE太难用了……还好,这个lcc的选项极少,命令行操作也简单,用codeblocks配置环境也很好用。鼓励一下作者,但大家别拿这东西当真,就一玩具而已……

turbo C 2.0/turbo C++ 3.0:轮到初学者的明星了,如果说borland C++的优秀名副其实,那早不了几年的turbo C++能够如此流行完全是拜谭浩强所赐……当年,Microsoft C++等其它的编译器厂商太不争气,给了同样不咋地的turbo C++以生存空间,按道理说,borland C++ 3.0一出世,turbo C++就该进垃圾桶了,可是………………不多说了,同样是16位编译器,borland C++ VS turbo C++ 3.0,都是borland的产品,IDE几乎一摸一样(仅外观上,编码质量上BC3还是明前高出一头的,至少可以随意切换出来,tc那就黑了……),大家,尤其是TC的死忠们,自己去测试一下吧,TC会用BC就会用,我告诉你效率差不是以百分比计算的,而是N倍,N>10……

digital mars compiler:就是发明D语言的那个公司……标准支持还可以,可是……只要连着printf几条中文……后面的任何东西都无法输出了……一个字——烂,32位的编译器,头一次见中文支持这么差的。

SDCC:看见codeblocks的列表里有他,而且有人推荐,而且版本号2.9也不算低了……结果呢?标准库一塌糊涂,人家TC、gcc、vc………………所有编译器都能编译的程序你编译不了,为什么?很简单……include文件夹寥寥20个h文件,平均每个2kb……大量宏、类型、函数都没有(告诉大家,连FILE*都没有,连clock_t都没有,人家的sqrt接受double,他只接受float!),标准库可是编译器的门面啊,而且你的crt的组织结构明显就不是通用的那种,似乎也不打算让用户使用glibc等来代替,我只能送你四个字——烂到极点。很明显,该编译器想自立门户,自己带了一套crt,说真的,你学gcc那样不带crt,让人家去用glibc,也许还能挽回点什么……这个编译器非常有个性,打算所有平台通吃,所以在CRT里提供了多达6种平台的crt,但是最基本的crt功能却一塌糊涂……
...全文
631 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
dumbow 2012-02-01
  • 打赏
  • 举报
回复
关于SDCC,哈哈哈哈,楼主真搞笑。
SDCC是面向单片机的C编译器,你拿来编译Windows程序,然后比较一番,相当的搞笑,相当的搞笑。

标准库?哈哈哈哈哈。SDCC的printf()函数是通过串口输出的,你上哪找这标准库去?
当然编译不了windows的程序了,这还用你说啊。
实际上SDCC在单片机世界里,是相当优秀的编译器之一。
时隔三年仍然狂笑中。拜托,先看看人家是干什么用的。
qshzf 2011-08-05
  • 打赏
  • 举报
回复
也不看看sdcc是看什么的,要FILE*有用么?!
万里有云 2010-03-16
  • 打赏
  • 举报
回复
想成为高手,深入了解编译器,操作系统和微机原理
MagiSu 2010-02-09
  • 打赏
  • 举报
回复
看到楼主让我回想起了亡灵法师还在的年代。
nevergone 2009-12-26
  • 打赏
  • 举报
回复
要让人相信你的测试结果
请把你测试代码 运行结果 等全部贴出来
不要你自己在那说

"
体积测试,最终的第一名是VC5.0,编译出来的和MASM win32汇编一样大,并且其在效率测试里也仅次于gcc和vc6排第三………………呵呵,VC5是VC现代化的起点,为后来的VC定了形的,由于效率测试中普遍使用的是crt,crt库偏慢(有许多安全增强,并且全部是多线程安全的)的VS2003,VS2005、VS2008就落后于VC5/6和 gcc了,不过仅仅在0.5~3%……
"

这样看起来就像你自己在那YY.
这是专业C/C++论坛 如果你的测试不是专业的, 是你自己YY作品, 请发到水区
不要在这污染论坛.
zgjxwl 2009-12-24
  • 打赏
  • 举报
回复
搬个板凳坐坐。。。
jackyjkchen 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 nevergone 的回复:]
测试得不专业
当玩笑看看了
[/Quote]
硬要当测试报告看,就是自己不专业了
nevergone 2009-12-24
  • 打赏
  • 举报
回复
测试得不专业
当玩笑看看了
jackyjkchen 2009-12-24
  • 打赏
  • 举报
回复
说真的,天天看见你们这种人我也烦的要死,移民滚蛋,大家都清净
healer_kx 2009-12-24
  • 打赏
  • 举报
回复
圣诞期间不搞老邓崇拜,现在开始崇拜楼主。
新一轮关于jackyjkchen的散发即将开始。
独孤过儿 2009-12-24
  • 打赏
  • 举报
回复
算了,懒得和你争了...

话说当年西洋人送给慈禧老佛爷一盏电灯,然后配上个发电机,灯泡很亮,老佛爷开始也很欣喜

后来突然有一天,老佛爷发现,灯泡的大头怎么是冲下的呢?认为这是大大的不吉利,于是这套装备就被扔

到大清国的仓库里去了。大清皇宫继续点着大大的蜡烛...

我看到这个故事、或者说是笑话的时候,都不知道是该喜,还是该悲...

sagegz 2009-12-24
  • 打赏
  • 举报
回复
本导吗?
机智的呆呆 2009-12-24
  • 打赏
  • 举报
回复
lz应该还是个学生吧~~~~
BIAOXYZ 2009-12-24
  • 打赏
  • 举报
回复
。。。
  • 打赏
  • 举报
回复
借鉴一下
chenzhp 2009-12-24
  • 打赏
  • 举报
回复
楼主好文。顶一个!
jackyjkchen 2009-12-24
  • 打赏
  • 举报
回复
记住,这不是测试报告,我的重点也不是VC、gcc和非主流之间的对比。仔细看看sdcc的描述,我就这受不了这个东西才发的这篇,不小心讲多了,顺便暴露的我对borland的藐视……你继续喷吧,看你能码多少字
jackyjkchen 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 fetag 的回复:]
你存在这样几个问题:

1、比较的编译器没有一个统一的基准。你列举的编译器,有的已经早就不升级了,有的升级很慢,几年还是那

一个版本呢,而VC和GCC在不断的升级,这就相当于拿人家老的东西和现在新的东西比,结果是否可靠很让人

怀疑。

2、平台的方面被你忽略了。就拿bcc 5.5来说,我要是没记错的话,好像是2000年左右的东西。我上学的时

候用,记得在release note里面好像看到过2000的字样。而那个时候XP都没问世呢,MS的编译器也还是VC6

呢。而VC又一直的在不断的升级,虽然都叫VC6,但实际上已经同最早期的编译器差很多了,那些SP就证明了

3、编译器极少有能通杀所有领域的,即使像gcc,vc这样的也不能。并且都是谁把握着绝对的领域,谁的编译

器就在那个领域有优势。这点很容易看出来,ICC在数学方面最强悍,因为INTEL把持着处理器的天下;而在早

期的时候,VC5之前的那个时期,同时代的VC的编译总是比BCC的编译器落后几年的时间;但是通常下一代的

windows出来以后,原来版本的BCC就不如VC了,为什么?因为微软把持着操作系统!

突然想起来一句话:关公战秦琼...

我倒不是想喷你啥,实在是感觉这样比较没什么实际意义;有那时间还不如研究研究一款常用的编译器生成的

代码,哪里优化的不够有意义呢。如果说还有一点点私心的话,那就是:Borland是我心中的一座丰碑!因为

当他想灭微软的时候(在编译器领域),微软被灭的一点怨言都没有;后期Borland的编译器不行了,不是因为

微软太强大,而是Borland自毁长城...
[/Quote]
我想你还是想喷我所以才喷,我并没有说比较什么,也没要分个高低,我说现在的那些非主流编译器很垃圾……难道惹着你了?

我告诉你我的VC6是那个中文版的假sp6,编译器和crt都是98年的修改日期(最新的应该是04年)!

borland不行了就是不行了,我讲得很客观,BC3很好,VC慢他一倍,4.x以后就不行了。

你想喷我就继续喷。
CCCCCCCCCCCCCCC 2009-12-24
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
lin_style 2009-12-24
  • 打赏
  • 举报
回复
支持楼主结果的发布共享。
即使退一万步来说,楼主的文章也是功能性的娱乐文章。还是长了不少见识。
加载更多回复(26)

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧