2

高速な 2 つの (可変サイズの) メモリ領域をバイナリとして比較する方法は?

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

1 に答える 1

3

2 進数のテキスト表現を比較する必要がない限り、ネイティブ バイナリが内部表現であるため、すべての比較はネイティブ バイナリを使用して実行されます。

プラットフォーム固有の回答については、プラットフォームのプロセッサのアセンブリ言語を確認してください。最新のプロセッサの多くには、メモリ領域を比較するためのアセンブリ言語命令があります。

他のコメンターが述べているようmemcmpに、プラットフォームに合わせて最適化する必要があるため、が最良の選択です。

自分で書かなければならない場合は、メモリから単語をロードし、一致するものがなくなるまでメモリを単語ごとに比較することをお勧めします。さらに詳細が必要な場合は、単語をバイトごとに比較して、正確な違いがどこにあるかを見つけてください。

于 2013-11-09T18:42:49.187 に答える