132 lines
2.5 KiB
C++
132 lines
2.5 KiB
C++
|
|
#include <base_struct.h>
|
|
#include <boost/ptr_container/ptr_vector.hpp>
|
|
#include <deque>
|
|
#include <dlist.h>
|
|
#include <time.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;
|
|
|
|
|
|
void heap_warm_up();
|
|
|
|
|
|
/**
|
|
* Function GetRunningMicroSecs
|
|
* returns current relative time in microsecs.
|
|
*/
|
|
unsigned GetRunningMicroSecs()
|
|
{
|
|
struct timespec now;
|
|
|
|
clock_gettime( CLOCK_MONOTONIC, &now );
|
|
|
|
unsigned usecs = now.tv_nsec/1000 + now.tv_sec * 1000 * 1000;
|
|
return usecs;
|
|
}
|
|
|
|
|
|
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 EDA_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 EDA_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 EDA_ITEM( NOT_USED ) );
|
|
}
|
|
|
|
for( int i=0; i<TEST_NODES; ++i )
|
|
{
|
|
// delete vec[i];
|
|
}
|
|
|
|
vec.clear();
|
|
}
|