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;
}