我正在编写带有大量数组访问的文字处理代码(静态数组,运行时没有更改)。我正在对字符串进行哈希处理,然后检查我的数组中是否存在(查找)。但是什么是一个好的实现呢?我正在用简单的方法做。如果与我的哈希输入匹配,则检查每个值的值。使其最快的想法?
我目前正在检查:
如果我使用循环展开,它会让这变得非常不同。如果我使用无序数组,它比有序数组慢很多。我会去看看在这种情况下矢量化是否会很好。
你有什么建议吗?或者更好的是,你将如何实现这个算法?
这是当前例程(EAX
如果不匹配,则返回数组中哈希的索引或负值):
Index_of:
push edx
push ecx
push ebx
mov ecx,123456 ;hash example. in the real code,it's set by a routine.
xor ebx,ebx
mov eax,array
.LOOP1:
cmp [eax],ecx ;match hash?
je .FOUND
cmp byte [eax],0
je .NOTFOUND
add ebx,1
add eax,4
jmp .LOOP1
.NOTFOUND:
neg eax
jmp .DONE
.FOUND:
mov eax,ebx
.DONE:
pop ebx
pop ecx
pop edx
ret
数组是:
; hashs for examples
array:
dd 33389990
dd 1234567
dd 81919191
dd 938383737
0