#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 ) );
for( int 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;
}
#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 ) );
for( int 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