#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