当我尝试创建自己的经典数组替代品时,我看到,在反汇编代码中添加了一条指令: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 :(得分:3)
一条指令并不是今天处理器的性能损失。我不担心它,而是建议你阅读Coding Horror的article on micro optimization。
但是,该指令只是将第一个索引(myarray + 0)移动到edx
,因此可以使用它。