2012-11-10 79 views
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 
+0

一個指令是性能損失?? –

+4

我不確定任何人都可以說沒有看到您的代碼以及您正在比較的內容,爲什麼會添加「額外」指令。 – Mat

+0

我不知道,但是代碼大小必須是一個常數(無需額外funtionality)。 – 4Bytes

回答

3

一個指令是不喪失性能與今天的處理器。我不會擔心它,而是建議你閱讀Coding Horror的編碼article on micro optimization

然而,該指令只是移動第一索引(myArray的+ 0)至edx,因此它可以被使用。