D 的异常处理开销高过 g++

Colorful 2007-09-07
PS:我是觉得Windows的SEH机制很好的说。
redsea 2007-09-07
DavidL 写道
另外GCC的异常处理应该是慢的,因为没有使用系统SEH架构。patent issue
Windows平台上DMD编译的结果应该和其他语言的效率是一样的,没必要测试,测了也是浪费时间。


你提到SEH, 你所指的异常处理很慢是指异常发生的时候慢吧?
我倒是不是太关心发生时候的速度, 只是关心异常没有发生时候, cache 语句带来的额外耗费.

oldrev 2007-09-07
dmd/src/phobos/internal/deh.c
Colorful 2007-09-07
我说下在Windows XP SP2下的测试结果。
因为我手头上没有BenchMark工具,所以只是给出程序运行时间比较,以作参考。
测试环境也不一样。

D的环境为:
DMD 2.004 + phobos
C++的环境为:
MinGW 5.1.3 , GCC 3.4.5

其他参数均一样。

先说C++程序
1.没有try/catch的运行总时间为72.273秒
2.带有try/catch的运行总时间为88.534秒


下面D程序
1.没有try/catch的运行总时间为55.039秒
2.带有try/catch的运行总时间为67.537秒

多次测试,时间均在上述时间范围内波动。

从上面的数据看,开销增长率差不多(在Win下异常机制均基于SEH)。
令我惊讶的是D的总运行时间在Win下比C++快很多。

难道Win版的GCC优化的还不够,呵呵。
redsea 2007-09-07
Colorful 写道
我说下在Windows XP SP2下的测试结果。
因为我手头上没有BenchMark工具,所以只是给出程序运行时间比较,以作参考。
测试环境也不一样。

D的环境为:
DMD 2.004 + phobos
C++的环境为:
MinGW 5.1.3 , GCC 3.4.5

其他参数均一样。

先说C++程序
1.没有try/catch的运行总时间为72.273秒
2.带有try/catch的运行总时间为88.534秒


下面D程序
1.没有try/catch的运行总时间为55.039秒
2.带有try/catch的运行总时间为67.537秒

多次测试,时间均在上述时间范围内波动。

从上面的数据看,开销增长率差不多(在Win下异常机制均基于SEH)。
令我惊讶的是D的总运行时间在Win下比C++快很多。

难道Win版的GCC优化的还不够,呵呵。


Windows 下D 增加了 22.7% 的开销, 比 Linux 小.
g++ 增加了 22.5%, 比 Linux 下面大.

两个反而反过来了, 不过现在的开销都差不多了.

不过既然比较, 就要和这个平台的主流开发环境比较, 应该和 VS2005 比比看.
oldrev 2007-09-07
货比货得扔,一个 hello world,DMD 1.20 产生的可执行文件大概 113KB (-O -release),同样参数(gdmd -O -release)的 GDC+Mingw 的大概 287KB 左右。

mingw 还用的是 msvcrt.dll,按道理应该比静态链接C运行库的DMD小。
oldrev 2007-09-07
老实说 mingw 是后娘养的孩子,自由软件份子不喜欢它,专业 win 开发者通常用vc,何况现在 VC 2005 express 是免费的。
qiezi 2007-09-07
我以前测试过DMD比GDC编译得程序要慢1倍左右,你可以试试GDC再看看结果,有空我也测试下
tomqyp 2007-09-07
我试了一下,用教主自己的DMC来和DMD比较
windows下
D
35.734
50.000
+38.92%

DMC
44.468
67.281
+51.30%

其中DMC开了fast inline 8087 code,和针对奔腾的优化,值得一提的是DMC编译出来的程序只有5K。
qiezi 2007-09-08
在G++和GDC上测试了:
lijie@lijie-laptop:~/test/cmp$ g++ -o testcpp test.cpp -O2
lijie@lijie-laptop:~/test/cmp$ gdc -o testd test.d -O2
lijie@lijie-laptop:~/test/cmp$ ls
testcpp  test.cpp  testd  test.d
lijie@lijie-laptop:~/test/cmp$ time ./testcpp 

turn 8192, count 1048576
real    0m25.946s
user    0m25.938s
sys     0m0.008s
lijie@lijie-laptop:~/test/cmp$ time ./testd

turn 8192 count 1048576

real    0m25.911s
user    0m25.906s
sys     0m0.000s
lijie@lijie-laptop:~/test/cmp$ time ./testcpp 

turn 8192, count 1048576
real    0m26.357s
user    0m26.314s
sys     0m0.024s
lijie@lijie-laptop:~/test/cmp$ time ./testd

turn 8192 count 1048576

real    0m25.936s
user    0m25.934s
sys     0m0.000s

结果是很相近的。ubuntu x86_64 gcc 4.1.2
Global site tag (gtag.js) - Google Analytics