a simple test of MemMan

 

#include  " stdafx.h "
#include 
" memman3_def.h "

using   namespace  std;

class  Page  {    //    16
public:
    
int        author;
    
int        date;
    
int        title;
    
int        text;
}
;

class  Wiki :  public  mem::resource  {
public:
    Wiki() : mem::resource( 
2 )
    
{
    }


    
bool stream_in()
    
{
        
if!pages )
        
{
            allocate( num );
            
return true;
        }

        
return false;
    }


    mem::size_type stream_size()
    
{
        
if( pages )
            
return sizeof(Page) * num;
        
else
            
return 0;
    }


    
void *stream_out()
    
{
        
void    *ptr = (void *) pages;
        pages 
= NULL;
        
return ptr;
    }


    
void allocate( int size )
    
{
        num 
= size;
        pages 
= (Page *) alloc( sizeof(Page) * num );
    }


    
void access_resource()
    
{
        stream_begin();

        
/////// DO YOUR ACCESS HERE! ///////

        
////////////////////////////////////


        stream_end();
    }


    
void deallocate()
    
{
        dealloc( pages, 
sizeof(Page) * num );
    }


public:
    Page    
*pages;
    
int        num;
}
;

const   int  access_size  =   100000000 ;
const   int  test_size  =   100000 ;    
const   int  alloc_size  =   1000 ;
const   int  heap_size  =   500000000 ;

int         randnum(  int  size )
{
    
return max( int(((float)rand() / (float)RAND_MAX) * (float)size), 1 );
}


int  _tmain( int  argc, _TCHAR *  argv[])
{
    Wiki    
*wiki;

    memman.begin( heap_size );

    wiki 
= new (memman.alloc( sizeof(Wiki)*test_size )) Wiki [test_size];

    
for(int i=0;i<test_size;++i)
        wiki[i].allocate( randnum( alloc_size ) );

    
forint i = 0; i < access_size; ++i )
    
{
        
int index = randnum( test_size );

        
if( index >= 0 && index < test_size )
            wiki[ index ].access_resource();
    }


    memman.print();

    
for(int i=test_size-1;i>=0;--i)
        wiki[i].deallocate();

    memman.dealloc( wiki, 
sizeof(Wiki)*test_size );

    memman.end();

    
int    a;
    cin 
>> a;

    
return 0;
}

heap allocated size: 476.837 MB
page size: 524288 Byte
cache allocated size: 880.509 MB
number of cache lookups: 100000000
cache hit rate: 99.9854 %
run time: 1 minutes 27 seconds

你可能感兴趣的:(simple)