Boost logo

Boost Users :

Subject: [Boost-users] boost::function performance issues with C++11
From: ·¹Í° (athrun911500_at_[hidden])
Date: 2014-07-03 17:10:13


Hi,

Does anyone know why -std=c++11 causes so much difference on boost::function?

I was planed to understand if there any performance issues with big size of parameters.
So I wrote a function that takes a vector as parameter, like func2 shows. I know it's better to use a pointer or reference as function parameter. I just want to evaluate the performance, so let's keep the vector as parameter.

However, I found that it's quite slow when compiled with -std=c++11. In detail, it takes 173874 milliseconds with C++11, while it takes 3676 seconds without C++11.

About 50 times slower!! How can that be?

In my opinion, I thought boost::function should had the same performance with std::function. So I decided to try std::function in C++11 directly, Finally, it takes about 29233 milliseconds. That's till 8 times slows!

Can anyone tell me what happend here?

int func2(std::vector<int> i){
    total += i.size();
    return i.size();

}

    const int T = 1000000;
    s = boost::chrono::system_clock::now();
    for (int i = 0; i < T; ++i)
        call(boost::bind(&func2, v));
    e = boost::chrono::system_clock::now();

In case you need to know my enviorment, my OS is Arch, compiler is gcc 4.9.0, and optimizations are default.
The execution time (ms) of three versions I tried:
boost::function with C++11 : 173874
boost::function without C++11 : 3676
std::function in C++11 : 29233

Any thoughts are appreciated!
Thanks,
Athrun



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