私は2つのsha1ハッシュを比較したいと思います。これを行う最も効率的な方法は何でしょうか?現在、私はmemcmpを使用しようとしています。ありがとう。sha1ハッシュを等価で比較する最良の方法
答えて
さて、あなたはすでにブロックがどのように大規模なコンパイル時に知っているので、あなたはこれを行うことができます:
#include <cstdint>
bool is_same_sha1(const char* p, const char* q)
{
const std::uint32_t* a = (const std::uint32_t*)p;
const std::uint32_t* b = (const std::uint32_t*)q;
return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]
&& a[3] == b[3] && a[4] == b[4];
}
しかし、やみくもに私のアドバイスを取ることはありません、あなたは対策はに対して任意のカスタムソリューションべきmemcmp
ソリューションを使用して、パフォーマンスが大幅に向上する場合にのみ使用してください。私はmemcmp
が非常に巧妙で汚れた何かをしたので、まだ高速だった場合でも驚くことはありません。
これは良い解決策のようです。 memcmpよりも速いです。ありがとう。 std :: equalが何らかの違いをもたらすかどうかを確認する必要があります。 – polapts
バッファが正しく配置されていないと、これが失敗することがあります。(これは正式には未定義の動作ですが、アライメントなどの外部制約が満たされていることが意図されていることは明らかですが、そうでない場合は非常に実装が貧弱です) –
もちろん、 uint32_t'が利用できない可能性があります。 (最終的には、あなたの移植性の制約に依存します.'Uint32_t'はWindowsとPosix準拠のシステムで利用可能です。十分に移植可能なアプリケーションがたくさんあります) –
memcmp()
の何か問題がありますか?両方のハッシュのすべてのバイトを比較する必要があります。 memcmp()
は最初に見つかった差異にすぐに失敗します。 memcmp()
は、ライブラリの作成者がプラットフォームに適したチャンクサイズで作業するように記述することができます。
私は 'std :: equal'が' memcpy'より速いと期待します。コンパイラは関係する正確な型のためにコンパイラを生成し、場合によっては整列などのことも考慮に入れることができます。 (もちろん、 'memcpy'は' __builtin_memcpy'のようなものに対して '#define'のようなものかもしれませんので、コンパイラは同様の最適化を行うことができます)。 –
真実ですが、境界線を揃えるのは間違いありません。もしそれらが32バイトブロックに整列していれば、それらをチェックする単一のSSE-something命令かもしれません... – sarnold
@sarnold正確に160ビットを比較するSSE命令がありますか? :)あなたは恐らくメモリから(過度に)危険にさらさなければならないでしょうし、余分なビットをマスクしなければならないでしょう。 – fredoverflow
std::equal
のようになりますが、memcmp
でも動作します。 効率に関しては、実装に依存しますが、 (場合によっては)どのようにデータが定義され表現されるかについても考えられます。
- 1. スキームリスト等価比較
- 2. Pythonのデータフレームの行を等価で比較する方法
- 3. 多次元配列を等価で比較する方法は?
- 4. C++の等価(==)オーバーロード、すべての属性を比較するショートカットまたは最良の方法
- 5. 厳密な等価比較
- 6. SHA1ハッシュをwordpressアカウントのログインに比較すると
- 7. Javaのif-elseブロックでの等価比較の方法は?
- 8. Handlebar.java:#ifヘルパーでの等価比較
- 9. ハッシュを比較し、各ハッシュを評価する
- 10. db2空の文字列等価比較
- 11. WPFコンボボックスのカスタム等価比較者
- 12. fsharpのカスタム比較と等価性
- 13. 入力イテレータの等価比較
- 14. 2つのURLを比較する最良の方法
- 15. LocalDatesを比較する最良の方法
- 16. std :: stringsを比較する最良の方法
- 17. PHPアルゴリズム(緩い)等価比較
- 18. 3つの値を等価で比較する
- 19. Smalltalk - 2つの文字列を等価で比較する
- 20. 2つのxドキュメントを等価で比較する
- 21. ハッシュされた文字列を比較する最良の方法は何ですか? (PHP)
- 22. リスト要素を比較する最も良い方法
- 23. Octave/MATLAB:構造体の等価性を比較するには?
- 24. 注文とコレクションの等価性を比較する
- 25. shared_ptrオブジェクトの等価性を比較する
- 26. EntityTag - 価値、キャッシング、比較 - ジャージーの方法
- 27. 2つのエンティティフレームワークエンティティを比較する最良の方法は何ですか?
- 28. Crystal Reportsを比較する最良の方法は何ですか?
- 29. ラムダで2つの損失とフィルター等価を比較
- 30. Javaでコンパレータの比較メソッドを実装する最良の方法は?
実際の質問は、次のようにする必要があります。実際のソリューションよりも速いものが本当に必要ですか?私はSHA1を比較することがアプリケーションのボトルネックであるとは思わない。 –
@FerdinandBeyer優れた点 – fredoverflow
私はフェルディナンドと全く同意していません。あなたがしようとしていることは、早すぎる最適化と呼ばれています... – Malkocoglu