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

对于当今的处理器来说,一条指令不会降低性能。我不会担心,而是建议您阅读 Coding Horror关于微优化的文章

但是,该指令只是将第一个索引 (myarray+0) 移动到edx以便可以使用它。

于 2012-11-10T17:37:11.577 回答