If you can allocate more memory while running, you need that space available. So rather than fragmenting your ram, just create a buffer as big as you need to begin with. then create/move/modify/destroy objects in that space.
#define MAX_ITEMS 10
//Raw memory allocation / deallocation.
void *operator new( size_t size ){ return malloc( size ); }
void operator delete( void * ptr ){ free( ptr ); return; }
//Placement new/delete
void *operator new( size_t size, void * ptr ){ return ptr; }
void operator delete( void * ptr, void *ptr2 ){ return; }
struct Obj{
int i_Something;
bool b_SomethingElse;
};
void setup( void ){
//Allocate data
void *v_Data = operator new( ( size_t ) ( sizeof( Obj ) * MAX_ITEMS ) );
//Represent allocation as an arraoy of Obj
Obj *o_Array = ( Obj* ) v_Data;
//Construct some objects in the allocation.
new( o_Array++ ) Obj;
new( o_Array++ ) Obj;
new( o_Array ) Obj;
//Reset array.
o_Array = ( Obj* ) v_Data;
//Do something with objects.
if( o_Array[ 1 ].b_SomethingElse )
++o_Array[ 1 ].i_Something;
//When done with objects
( o_Array++ )->~Obj();
( o_Array++ )->~Obj();
( o_Array )->~Obj();
//When done with allocation.
operator delete( v_Data );
return;
}
void loop( void ){ return; }