|
Boost : |
From: David Maisonave (dmaisonave_at_[hidden])
Date: 2006-01-10 11:08:39
I'm doing performance test comparing different containers of smart
pointers to the boost pointer containers.
>From my test, it does seem that boost::ptr_vector does seem to do a much
better job of populating the container than does a std::vector container
of boost::shared_ptr, cow_ptr, and copy_ptr.
I was really surprise to find out that ptr_vector was 2 to 3 times
faster than vector<cow_ptr<T> >, but I was even more surprise to find
that it was also 2 to 3 times faster than vector<shared_ptr<T> >.
In fact, even the copy_ptr was twice as fast as the boost::shared_ptr
and cow_ptr in populating the container.
It seems reference counting has a much bigger impact on performance than
I had anticipated.
Can someone else run this test on a different platform, to see if they
get similar results:
I used the following code:
http://code.axter.com/copy_ptr.h
http://code.axter.com/cow_ptr.h
http://code.axter.com/shape_test.h
http://code.axter.com/boost_ptr_containers/main.cpp
My test was done on Windows XP Pro and 2003 Server.
I used VC++ 7.1
Here's an example of one of the results I'm getting:
vector<copy_ptr<Shape> > 1.30 s
boost::ptr_vector<Shape> 0.88 s
vector<cow_ptr<Shape> > 3.31 s
vector<boost::shared_ptr<Shape> > 2.97 s
vector<copy_ptr<Shape> > 1.19 s
boost::ptr_vector<Shape> 0.67 s
vector<cow_ptr<Shape> > 3.25 s
vector<boost::shared_ptr<Shape> > 2.92 s
I believe the performance hit is coming from having to call new on the
constructor. I'm wondering if there's a more efficient way to do
reference counting that can avoid calling new.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk