title: Defragmenting C++ Heap Allocator & STL
body: <p>I'm looking to write a self defragmenting memory manager whereby a simple incrementing heap allocator is used in combination with a simple compacting defragmenter.  </p>
  
  <p>The rough scheme would be to allocate blocks starting at the lowest memory address going upwards and keeping book-keeping information starting at the highest memory address working downwards.  </p>
  
  <p>The memory manager would pass back smart pointers - boost's intrusive_ptr's seems the most obvious to the book-keeping structs that would then themselves point to the actual memory block thus giving a level of indirection so that the blocks can be easily moved around.</p>
  
  <p>The defragmenter would compact down the heap starting at 'generation' bookmarks to speed up the process and only defragmenting a fixed amount of memory at a time.  Raw pointers to the blocks themselves would be valid until the next defrag pass and so could be passed around freely until such a time improving performance.</p>
  
  <p>The specific application for this is console game programming and so at the beginning or end of each frame a defrag pass could be done relatively safely.</p>
  
  <p>So my question is has anybody used this kind of allocation scheme in combination with STL would it just completely blow STL apart as I suspect.  I can see std::list&lt; intrusive_ptr > working at the intrusive_ptr level but what about the allocation of the stl list nodes themselves is there anyway to override the next/prev pointers to be intrusive_ptr's themselves or am I just going to have to have a standard heap allocator along side this more dynamic one.</p>