Boost logo

Boost Users :

Subject: Re: [Boost-users] [bind] performance implications?
From: Peter Dimov (pdimov_at_[hidden])
Date: 2009-05-07 13:29:37


Dominique Devienne:
> Probably a silly question, but has anyone performed benchmarks on
> using a std::for_each(begin, end, bind(&C::f, _1)); compared to the
> hand written loop? Under the debugger I see bind adds a 4 or 5 stack
> frames between the for_each frame and the C::f frame, so I'm wondering
> if there is any overhead in these?

It depends (heavily) on the amount of inlining the compiler does. In the
simple case of

#include <boost/bind.hpp>
#include <algorithm>

struct X
{
    void f();
};

int main()
{
    extern int N;
    extern X x[];

    std::for_each( x, x + N, boost::bind( &X::f, _1 ) );
}

the loop generated by MSVC 7.1 in a release build is

$L9292:
 mov ecx, esi
 call ebx
 inc esi
 cmp esi, edi
 jne SHORT $L9292

where ebx points at X::f. More complicated examples would probably carry
more overhead as the compiler inlining threshold is reached.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net