C++ Standard Template Library——STL的性能究竟如何,不同版本的STL其性能差异有多少?为了解这些,让我们来做一个简单的测试吧。
测试的基本思路是用C与C++分别实现一个程序,实现相同的功能,并要求C++程序的主要数据结构用STL中的Containers、Algorithms等来实现。然后比较两个程序的性能,看看究竟谁快,快多少。
因本人水C/C++水平极为有限,写的code实在拿不出手,为保证公平,最好用一位大家公认的大师级人物写的code来做这个测试。好在《The Practice of Programming》(中译本《程序设计实践》,裘宗燕译)第三章里,作者Brian W. Kenighan分别用C和C++写了实现相同功能的Code,他老人家的程序用在这里最合适不过了。这个程序是用来实现“马尔可夫(markov)链算法”的,关于markov链算法的详情请看本文附录1。
我在《The Practice of Programming》一书的主页 http://tpop.awl.com 下载到相应的代码,为了记录程序运行的时间,我在代码中加了几条语句(以“/* Added by Chen Shuo*/”标明),完整的代码见本文附录2。
测试用机:
机器一:PII 300 with 512k L2 Cache,Intel 440LX主板 66MHz外频,64M RAM,安装P – Win98 SE;
机器二:PII 350 with 512k L2 Cache,Intel 440BX主板 100MHz外频,128M RAM,安装Windows2000 Professional中文版with Service Pack 2。
编译环境:(均在Windows下编译)
1、 Microsoft Visual C++ 6.0 with Service Pack 5
2、 Cygwin : dll ver 1.3.2 与 GNU C++ 2.95.3 (下载自http://www.cygwin.com)
3、 Borland C++ Compiler 5.5.1 for free (下载自http://www.borland.com)
共有三个文件要编译,分别是C版的markov.c;使用list的markov_l.cpp;使用deque的markov_d.cpp。其中markov.c需要和eprintf.c一同编译链接。
编译命令行参数(均已打开速度优化选项,编译的可执行文件在DOS Prompt中执行):
ps.我把BCC安装在C:/bcc,Cygwin安装在c:/cygwin。所以环境变量的设置办法是:
set MSDevDir=C:/PROGRA~1/MICROS~3/COMMON/msdev98

本文对不同版本C++ Standard Template Library(STL)的性能进行测试。用C与C++分别实现马尔可夫链算法程序,在不同编译环境下编译得到多个可执行文件。测试发现GNU C++ 2.95.3带的STL性能较好,精心设计的C程序比使用STL的C++程序执行快,还尝试将SGI STL用于其他编译器。
760

被折叠的 条评论
为什么被折叠?



