2013-11-09 79 views
1

如何比較快速的兩個(可變大小)內存區域爲二進制?快速比較兩個內存區域

int compare (void *a,void *b,size_t size){ 
... 
} 


// reg1 > reg2 
reg1 = 00001000000000000000000000000000000000000000 (binary); 
reg2 = 00000100000000000000000000000000000000000000 (binary); 

if (compare(reg1,reg2,32) > 0){ 
    return true; 
}else{ 
    return false; 
}; 
+4

'man 3 memcmp'。 – 2013-11-09 17:48:50

+5

['std :: memcmp'](http://en.cppreference.com/w/cpp/string/byte/memcpy)? –

+0

分析顯示你這是性能瓶頸的地方嗎? –

回答

2

所有比較都是使用本機二進制執行的,因爲這是內部表示,除非您需要比較二進制數的文本表示形式。

對於平臺特定的答案,請檢查平臺處理器的彙編語言。許多現代處理器都有用於比較內存區域的彙編語言指令。

正如其他評論者所述,memcmp是您的最佳選擇,因爲它應該針對您的平臺進行優化。

如果你必須自己寫,我建議從內存中加載一個單詞並逐字比較內存,直到沒有匹配。如果您需要更多細節,請逐字比較單詞以找出確切的區別。