1

従来の配列に代わる独自の配列を作成しようとすると、逆アセンブルコードに1つの命令が追加されたことがわかりましmov edx,dword ptr [myarray]た。この追加の命令が追加されたのはなぜですか?

別の機能を使用したいのですが、パフォーマンスを低下させたくありません。この質問を解決する方法は?このアプリケーションでは、すべてのプロセッササイクルが重要です。

例えば:

for (unsigned i = 0; i < 10; ++i)
{
    array1[i] = i;
    array2[i] = 10 - i;
}

アセンブリ(クラシックint配列):

mov edx, dword ptr [ebp-480h]  
mov eax, dword ptr [ebp-480h]  
mov dword ptr array1[edx*4], eax  

mov ecx, 10
sub ecx, dword ptr [ebp-480h]
mov edx, dword ptr [ebp-480h]
mov dword ptr array2[edx*4], ecx

アセンブリ(私のクラス):

mov edx,dword ptr [array1]
mov eax,dword ptr [ebp-43Ch]
mov ecx,dword ptr [ebp-43Ch]
mov dword ptr [edx+eax*4], ecx

mov edx, 10
sub edx, dword ptr [ebp-43Ch]
mov eax, dword ptr [array2]
mov ecx, dword ptr [ebp-43Ch]
mov dword ptr [eax+ecx*4], edx
4

1 に答える 1

3

1つの命令は、今日のプロセッサのパフォーマンスを損なうものではありません。私はそれについて心配することはなく、代わりにマイクロ最適化に関するCodingHorrorの記事を読むことをお勧めします。

ただし、その命令は最初のインデックス(myarray + 0)をに移動しているだけedxなので、使用できます。

于 2012-11-10T17:37:11.577 に答える