|
Boost Users : |
From: Finley Lee (finleyl_at_[hidden])
Date: 2006-04-19 11:20:36
Dear list,
I'm using boost::fast_pool_allocator to replace the default allocator in
a map. This works great, but I'm having a bit of trouble freeing the
memory explicitly.
I'd like to call boost::singleton_pool::purge_memory(), but I don't know
how to instantiate the correct version. Is there a way to determine the
size of the chunks the map allocator will require? I have determined by
debugging that the size is 28 bytes, but I imagine that this is
dependent on the particular implementation of map.
Below is a sample program which illustrates the situation. Any guidance
would be very appreciated.
- Finley
////////////////////////////////////////////////////////////////////////
///
#include <assert.h>
#include <iso646.h>
#include <map>
#include <boost\pool\pool_alloc.hpp>
class mydata
{
public:
mydata() {}
mydata( int _a, short _b, char _c ) :
a(_a), b(_b), c(_c) {}
int a ;
short b ;
char c ;
};
typedef std::map< int, mydata,
std::less<int>,
boost::fast_pool_allocator< std::pair<int, mydata> > >
mymap ;
int _tmain(int argc, _TCHAR* argv[])
{
{
mymap m ;
for ( int i = 0 ; i < 10000 ; i++ )
m[i] = mydata( i, i, i ) ;
}
bool memory_freed = boost::singleton_pool<
boost::fast_pool_allocator_tag, sizeof( std::pair<int,mydata> )
>::purge_memory() ;
//bool memory_freed = boost::singleton_pool<
boost::fast_pool_allocator_tag, 28 >::purge_memory() ;
assert( memory_freed ) ;
return 0;
}
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