Boost logo

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