Dave Abrahams пишет:
On Mon, Sep 6, 2010 at 6:23 PM, Ilya Murav'jov
wrote: So I began to investigate and found out each invocation of known Boost constructs has its non-zero cost. I chose a source file(*), commented out all and then incrementally uncommented functions from beginning, compiled and measured times. Here is my results (compile time, not run time!): - BOOST_FOREACH costs 0.1 sec - boost::function<> invocation costs 0.05 sec - boost::lambda::bind() with placeholders costs 0.1 sec - Boost.Range adaptor transformed() costs ~0.1 too As you can see, 10 boost::lambda::bind() slow down your compilation for whole 1 second!
All that is measured against gcc 4.4, Ubuntu 9.10, with the most light options I picked up: "g++ -g -O0 -pipe" (I need -g for debugging anyway). Also I found out that gcc 4.2 is the quickest from 4.1, 4.2, 4.3, 4.4 version of gcc, and gcc 4.4 is the most slow one of them (~28% slower than gcc 4.2). :(
G++4.5 implements O(1) template lookup, which could have a significant effect for Boost users.
Ok, I've done some benchmarking with g++ 4.5, g++ 4.2 and clang 1.1/llvm 2.7. Compilation time is measured with "-c -g -O0 -pipe", with Boost 1.44 . 1) 100 invocations of boost::lambda::bind(), http://gitorious.org/bombono-dvd/bombono-dvd/blobs/master/src/mlib/tests/pro... : g++ 4.5: 9.57 sec g++ 4.2: 14.75 sec clang++ 1.1/llvm 2.7: 6.00 sec MSVC2k5(OvermindDL1): 1.00 sec 2) 100 invocations of BOOST_FOREACH, http://gitorious.org/bombono-dvd/bombono-dvd/blobs/master/src/mlib/tests/pro... : g++ 4.5: 3.15 sec g++ 4.2: 3.95 sec clang++ 1.1/llvm 2.7: 3.07 sec 3) 100 invocations/instantiations of boost::function, http://gitorious.org/bombono-dvd/bombono-dvd/blobs/master/src/mlib/tests/pro... : g++ 4.5: 3.20 sec g++ 4.2: 3.30 sec clang++ 1.1/llvm 2.7: 2.74 sec 4) 100 invocations/instantiations boost::adaptors::filtered (Boost.Range' filter on top of Boost.Iterator), http://gitorious.org/bombono-dvd/bombono-dvd/blobs/master/src/mlib/tests/pro... : g++ 4.5: 4.27 sec g++ 4.2: 6.60 sec clang++ 1.1/llvm 2.7: 3.48 sec Regards, Ilya P.S. I must admit that tests are rather synthetic but they do show the degrees of compilers speeds.