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 |
相关讨论
相关资源推荐
- C++程序设计语言[Bjarne.Stroustrup]英文原版.pdf
- C++之父-Bjarne Stroustrup
- C++ 之父 Bjarne Stroustrup:简单的表述方式才是最优的方案
- [英文版]C++之父Bjarne Stroustrup: 简单的表述方式才是最优的方案
- C++三部曲|C++编程核心思想
- C++ 之父 Bjarne Stroustrup : 简单的表述方式才是最优的方案
- Bjarne Stroustrup的FAQ:C++的风格与技巧
- c++之父:Bjarne Stroustrup
- Bjarne Stroustrup 语录
- C++之父 Bjarne Stroustrup