You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <base_struct.h>
#include <boost/ptr_container/ptr_vector.hpp>
#include <deque>
#include <dlist.h>
#include <time.h>
#include <common.h>
#define TEST_NODES 100000000
//typedef std::vector<EDA_ITEM*> EDA_ITEMV;
//typedef std::deque<EDA_ITEM*> EDA_ITEMV;
typedef boost::ptr_vector<EDA_ITEM> EDA_ITEMV;
class MY_ITEM : public EDA_ITEM{public:
MY_ITEM( KICAD_T id ) : EDA_ITEM( id ) {}
#if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); }#endif
};
void heap_warm_up();
int main( int argc, char** argv ){ EDA_ITEMV v; DLIST<EDA_ITEM> dlist;
unsigned vAllocStart; unsigned vAllocStop; unsigned vIterateStart; unsigned vIterateStop;
unsigned dAllocStart; unsigned dAllocStop; unsigned dIterateStart; unsigned dIterateStop;
heap_warm_up();
vAllocStart = GetRunningMicroSecs();
for( int i=0; i<TEST_NODES; ++i ) { v.push_back( new MY_ITEM( NOT_USED ) ); }
vAllocStop = GetRunningMicroSecs(); vIterateStart = vAllocStop;
for( EDA_ITEMV::const_iterator it = v.begin(); it != v.end(); ++it ) { if( it->Type() == -22 ) { printf( "never this\n" ); break; } }
vIterateStop = GetRunningMicroSecs();
#if 0
for( int i=0; i<TEST_NODES; ++i ) { delete v[i]; }#endif
v.clear();
dAllocStart = GetRunningMicroSecs();
for( int i=0; i<TEST_NODES; ++i ) { dlist.PushBack( new MY_ITEM( NOT_USED ) ); }
dAllocStop = GetRunningMicroSecs(); dIterateStart = dAllocStop;
for( const EDA_ITEM* it = dlist; it; it = it->Next() ) { if( it->Type() == -22 ) { printf( "never this\n" ); break; } }
dIterateStop = GetRunningMicroSecs();
printf( "vector alloc: %u usecs iterate: %u usecs\n", vAllocStop - vAllocStart, vIterateStop - vIterateStart );
printf( "dlist alloc: %u usecs iterate: %u usecs\n", dAllocStop - dAllocStart, dIterateStop - dIterateStart );}
void heap_warm_up(){ // dry run allocate enough object for process to obtain all memory needed
EDA_ITEMV vec;
for( int i=0; i<TEST_NODES; ++i ) { vec.push_back( new MY_ITEM( NOT_USED ) ); }
for( int i=0; i<TEST_NODES; ++i ) { // delete vec[i];
}
vec.clear();}
|