len3d

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

#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

posted on 2007-12-13 14:35  Len3d  阅读(249)  评论(1编辑  收藏  举报