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
一個指令是性能損失?? –
我不確定任何人都可以說沒有看到您的代碼以及您正在比較的內容,爲什麼會添加「額外」指令。 – Mat
我不知道,但是代碼大小必須是一個常數(無需額外funtionality)。 – 4Bytes