2017-02-17 9 views
-2

C++では、ReadProcessMemoryを使用していくつかの数値の値を取得しています。それぞれの数字は並んでおり、5つの数字があります。個々の番号を個別に読み取るために5つの単一RPM呼び出しを行う方が速いのですか?または、これらの5つの数値を含むように構築された構造全体を読み取る単一のRPM呼び出しが速くなりますか?例えば、複数の小さなRPMまたは単一構造のRPM

Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 

または

struct numbers{ 
    int a; 
    int b; 
    int c; 
    int d; 
    int e; 
    }; 
Mem.Read<numbers>(DWORD64 L1) 

ありがとう!

+0

お店でミルク5袋を拾う必要がある場合は、5回倒して1軒ずつ持ち歩くか、5回拾い上げて1回だけ移動する方が速いでしょうか?尋ねなければならない場合は、おそらく 'ReadProcessMemory'を呼び出すべきではありません。 – IInspectable

+0

奇妙な質問。もちろんこの場合、 'ReadProcessMemory'への一回の呼び出しは、5回の呼び出しよりも5倍速くなります。 – RbMm

+0

質問は文句が間違っていました。私は、構造や個々のRPM呼び出しを非常に大量に読み込むほうがよいのでしょうか?たとえば、もし私の構造が数千ビットの大きさだったら... – anon6588

答えて

0

メモリを読み取るためにReadProcessMemoryを使用すると、「低速」なので、1つの大きな操作は多くの小さな読み取りより高速になります。

ReadProcessMemoryがおそらくカーネルモードへのコンテキスト切り替えを実行し、(ページアウトされている可能性のある)別のプロセスのページにアクセスする必要があるという事実を無視すると、 1つの大きな速度と多くの小さな速度の速度。

あなた自身のプロセスから読んでいるとします。小さなバッファを持つmemcpyへの多くの呼び出しは、1回の大きなコピー操作よりも遅くなります。関数を呼び出すだけでオーバーヘッドがあります。呼び出し命令、スタックの設定、実際の作業の実行、そしてスタックの復元と復帰が含まれます。典型的なmemcpyの実装は、大量の読み込みに最適化されていることが多く、ソースアドレスを4バイトまたは8バイトのチャンク(大部分は新しいCPUの場合はそれ以上)の大部分を読み込めるようにするために少し前処理を行います。

私は通常、パフォーマンスについてはわからないがタイマーで測定する必要があると言っていますが、この場合は単なる読み込みではありません。

関連する問題