データ割り当て

#include <stdio.h>
#include <windows.h>
 
//---------------------------------------------------------
//    @def サイズ
//---------------------------------------------------------
#define SIZE 1000000
 
//---------------------------------------------------------
//    @class パフォーマンスチェック
//---------------------------------------------------------
class PerformanceCheck
{
private :
    LARGE_INTEGER	_s1, _s2, _f;
 
public :
    PerformanceCheck()
    {
        ::QueryPerformanceCounter( &_s1 );
    }
 
    ~PerformanceCheck()
    {
        ::QueryPerformanceCounter( &_s2 );
 
        ::QueryPerformanceFrequency( &_f );
 
        printf( "%f\n", (double)( _s2.QuadPart - _s1.QuadPart ) / (double)( _f.QuadPart ) );
    }
};
 
static int data[SIZE];
 
//---------------------------------------------------------
//    @func 関数
//---------------------------------------------------------
void func1()
{
    PerformanceCheck check;
 
    for( int i=0; i<SIZE; ++i ) {
        data[i] = 0;
    }
}
 
//---------------------------------------------------------
//    @func メイン関数
//---------------------------------------------------------
void main()
{
	func1();
 
	func1();
}
 
このプログラムの結果は
 
私のオンボロパソコンでは
 
0.010569
0.005414
 
最初のほうがパフォーマンスがやや低いです。同じ処理を行っているのになぜおきているのでしょうか?というものです。
 
調べてみると
static int data[SIZE];
これをした瞬間は領域が確保されるだけで
実際は
func1();
を呼び出し
data[i] = 0;
されたときに割り当てられるみたいです。
 
キャラクタが出た瞬間にパフォーマンスが落ちる等の原因はここから起きる可能性があるかも?
 
たいしたことじゃなくてすみません m( _ _ )m
最終更新:2008年07月04日 00:47
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。