2

アプリケーションの圧縮にlibLZFを使用しています。ドキュメントには、私に関係するコメントがあります。

lzf_compress might use different algorithms on different systems and
even different runs, thus might result in different compressed strings
depending on the phase of the moon or similar factors.

圧縮データを比較して、入力が同一かどうかを確認する予定です。明らかに、異なるアルゴリズムが使用された場合、圧縮されたデータは異なります。この問題の解決策はありますか? 毎回特定のアルゴリズムを強制する方法はありますか? それとも、このコメントは実際には真実ではありませんか? 結局のところ、phase of the moon, or similar factors少し奇妙です。

4

2 に答える 2

6

その場で解凍し、比較します。

libLZF の Web サイトには、「解凍 [...] は基本的に (最適化されていない) memcpy 速度で行われる」と記載されています。

于 2011-03-15T14:24:47.793 に答える
6

「月の位相依存性」の理由は、一部のデータ構造の初期化を省略して、パフォーマンスを少し絞り出すためです (もちろん、解凍の正確性に影響しない場合のみ)。圧縮ライブラリが進むにつれて、珍しいトリックではありません。したがって、圧縮コードを別のワンショット プロセスに入れ、OS がプロセスに引き渡す前にメモリをゼロにする場合 (すべての「大きな」OS はそうしますが、一部の小さな OS はそうしない場合があります)、常に同じ結果が得られます。圧縮結果。

また、lzfP.h から次の点に注意してください。

/*
 * You may choose to pre-set the hash table (might be faster on some
 * modern cpus and large (>>64k) blocks, and also makes compression
 * deterministic/repeatable when the configuration otherwise is the same).
 */
#ifndef INIT_HTAB
# define INIT_HTAB 0
#endif

したがって、libLZFをコンパイルして決定論的にする場合にのみ必要だと思いますが#define INIT_HTAB 1、さらに分析せずにあまり賭けることはありません。

于 2011-03-15T14:51:50.860 に答える