[pool] Speed of pool_allocator<>
Hi! I am in the process of writing a program which has to handle large numbers (~200000 - 400000) objects of the same class. These objects will be created and deleted frequently, so I thought some kind of specialized memory management would be handy. I wrote a test program (see below) to check what boost.pool would gain me. The results make me think that I have done something wrong: debug mode: std::allocator 2.17s boost::pool_allocator 7.18s release mode: std::allocator 0.11s boost::pool_allocator 0.36s i.e., std::allocator was more than 3 times faster than boost::pool_allocator (Win2k, 256MB). Any ideas what i have done wrong? See the test program below. // MemoryPoolTest.cpp // Boost includes ------------------------------------------------------------- #include <boost/timer.hpp> #include <boost/pool/pool_alloc.hpp> // Std includes --------------------------------------------------------------- #include <vector> #include <iostream> enum { NUM_ELEMENTS = 3000000 }; template <class Allocator> double Test() { std::vector<Allocator::value_type, Allocator> Vector; boost::timer Timer; for(int i = 0; i < NUM_ELEMENTS; ++i) { Vector.push_back(i); } return Timer.elapsed(); } int main(int argc, char* argv[]) { std::cout << "Starting memory pool test" << std::endl; double Time; std::cout << "Allocating with boost::pool_allocator<>: "; Time = Test<boost::pool_allocator<int> >(); std::cout << Time << "s" << std::endl; std::cout << "Allocating with std::allocator<> : "; Time = Test<std::allocator<int> >(); std::cout << Time << "s" << std::endl; return 0; }
Klaus Nowikow wrote:
Hi!
I am in the process of writing a program which has to handle large numbers (~200000 - 400000) objects of the same class. These objects will be created and deleted frequently, so I thought some kind of specialized memory management would be handy.
I wrote a test program (see below) to check what boost.pool would gain me. The results make me think that I have done something wrong:
debug mode: std::allocator 2.17s boost::pool_allocator 7.18s
release mode: std::allocator 0.11s boost::pool_allocator 0.36s
i.e., std::allocator was more than 3 times faster than boost::pool_allocator (Win2k, 256MB). Any ideas what i have done wrong?
[...]
template <class Allocator> double Test() { std::vector<Allocator::value_type, Allocator> Vector; boost::timer Timer;
for(int i = 0; i < NUM_ELEMENTS; ++i) { Vector.push_back(i); }
return Timer.elapsed(); }
If I read the code correctly, you don't create or delete objects. You create and delete (large) arrays of objects.
participants (2)
-
Klaus Nowikow
-
Peter Dimov