我必須在性能敏感的地方比較相等的16字節內存塊。更快的內存比較相等16個字節塊比memcmp
塊總是完全對齊,它們總是正好是16個字節。在我看來,我應該能夠利用這些知識,並提出比逐字節比較更好的方法。
事實上,我認爲絕大多數memcmp實現都是這樣做的,但顯然這需要一段時間來分析地址和大小。在我的情況不是這樣,但它仍然較快的是:
...
mov $0x10,%ecx
mov -0x4c(%ebp),%esi
repz cmpsb %es:(%edi),%ds:(%esi)
我試圖實現32位優化它會檢查我的自我,但它不會有更好的表現。可能是因爲memcmp利用處理器指令,我的自定義C++代碼沒有。
對於這種情況,任何想法是否有更快的memcmp?
看看你的編譯器生成了什麼。 SSE4.2有一個比較16字節字符串的指令。 – Mysticial 2014-12-07 04:55:58
比較找什麼? (差異,位差,否定?) – iamgopal 2014-12-07 04:56:23
許多編譯器都會內聯memcmp。如果size參數是一個常量,那麼編譯器可能會很聰明。 – 2014-12-07 04:58:30