/**

使い方:
#define のGC_TESTをコメントアウトするとNewのテストです。
そのままだとBoehmGCのテストです。
事前に、BoehmGCをmakefileして使用できるようにしてください。




*/

#define GC_TEST


//いろんなものをインクルード
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"winmm")

#ifdef GC_TEST

    #define GC_NOT_DLL
    #pragma comment(lib,"gc")
    #include "include/gc_cpp.h"
#else
    #include <iostream>
#endif

//Loopの回数
#define LOOPNUM 1245044

//プロトタイプ関数
void print(char *str,...);
bool dKingyoAddLog( char *filename,char *str , ... );


//gcデータ型宣言

#ifdef GC_TEST
    #define DS 256//DataSize


    class test_gc :public gc{
     char p[DS];
    public:
     ~test_gc(){//デストラクタは無用の長物
     }
    };
    class test_gc_cleanup : public gc_cleanup{
        char p[DS];
    public:
        ~test_gc_cleanup(){//ちなみにgc_cleanupではデストラクタが呼ばれる。
        }
    };


    void BoehmGCTest(){
        //BoehmGC (public gc)
        {
            int i=0;
            DWORD time=timeGetTime();
            test_gc *h;
            while(i!=LOOPNUM){
                h = new test_gc;
                i++;
            }
            time=timeGetTime()-time;
            print("BoehmGCTime(:public gc)=%dmsec",time);
        }
        //BoehmGC (public gc_cleanup
        {
            int i=0;
            DWORD time=timeGetTime();
            test_gc_cleanup *h;
            while(i!=LOOPNUM){
                h = new test_gc_cleanup;
                i++;
            }
            time=timeGetTime()-time;
            print("BoehmGCTime(:public gc_cleanup)=%dmsec",time);
        }
        Sleep(5000);

    }
#else

    void NewTest()
    {
        //New
        {
            DWORD time;
            int i2=0;
            i2=time=0;
            time=timeGetTime();
            while(i2!=LOOPNUM){
             char *p=new char[256];
             delete[] p;
             i2++;
            }
            time=timeGetTime()-time;
            print("new and delete Time=%dmsec",time);
            
            //printf("End! BoehmGC = %d new and delete = %d",reserved,time);
        }
        Sleep(5000);
    }
#endif


int main(){
    print("LoopNum=%d ",LOOPNUM);

    #ifdef GC_TEST
        BoehmGCTest();
    #else
        NewTest();
    #endif
    
    return 0;
}

void print(char *str,...){
    char s[512];
    va_list VaList;
    va_start( VaList , str ) ;
    vsprintf( s , str , VaList ) ;
    va_end( VaList ) ;
    dKingyoAddLog("Log.txt",str);
}


bool dKingyoAddLog( char *filename,char *str , ... )
{
    static FILE *fp=NULL;
    fp=NULL;
    static char s[1024];
    static va_list VaList ;
    memset((void *)s,NULL,sizeof(char)*1024);
    va_start( VaList , str ) ;
    vsprintf( s , str , VaList ) ;
    va_end( VaList ) ;
    if(s[strlen(s)-1] != '\n'){
        //最後の文字列に\nを入れる
        strcat(s,"\n");
    }
    if(NULL != (fp = fopen( filename , "at" ))){
        fputs( s , fp ) ;
        printf(s);
        fclose( fp ) ;
    }else{
            return false;
    }
    return true;
}
広告 [PR]スキンケア  転職 化粧品 無料 ライブチャット