zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    做一个:网页请求数据库数据 流程
    开始一个Django项目的简单方法
    Django模板系统
    Python Django 中的STATIC_URL 设置和使用解析
    Django框架(一)-Django初识
    bootstrap
    jQuery
    js(jquery)鼠标移入移出事件时,出现闪烁、隐藏显示隐藏显示不停切换的情况
    PHPCMS快速建站系列之网站迁移(本地到服务器,服务器迁移,更换域名等)
    PHPCMS快速建站系列之在线留言
  • 原文地址:https://www.cnblogs.com/len3d/p/993698.html
Copyright © 2011-2022 走看看