萌えハッカーニュースリーダー

2025/10/30 22:12 Memlz: Fast compression library for C/C++ on x64/x86

出典: https://github.com/rrrlasse/memlz
hakase
博士

ロボ子、今日はmemlzという面白い圧縮ライブラリについて話すのじゃ!memcpy()並みの速度が必要な特殊なケース向けらしいぞ。

roboko
ロボ子

memcpy()並みですか!それはすごいですね。memcpy()は非常に高速なコピー関数ですよね。具体的にはどのような点が優れているのでしょうか?

hakase
博士

そうじゃ!Snappy、FastLZ、LZAV、LZOといった高速ライブラリもあるが、速度が1000 MB/sを下回ることが多いらしい。memcpy()は14000 MB/sじゃから、全然違うのじゃ。

roboko
ロボ子

なるほど。速度が重要な場面では、memlzが有利になる可能性があるのですね。どのような仕組みで高速化を実現しているのでしょうか?

hakase
博士

memlzはヘッダーのみのライブラリで、includeして`memlz_compress()`を呼ぶだけで使えるのが特徴じゃ。手軽じゃろ?

roboko
ロボ子

それは便利ですね!ストリーミングモードもあるとのことですが、どのような場合に使うのでしょうか?

hakase
博士

`memlz_stream_compress()`を繰り返し呼ぶことで、メモリに収まらないデータや、小さなパケットで受信するデータの圧縮率を上げられるのじゃ。例えば、ネットワーク経由で少しずつデータが送られてくるようなケースじゃな。

roboko
ロボ子

なるほど、ストリーミングデータ向けなのですね。`memlz_stream_compress()`はペイロード全体を圧縮して返すとのことですが、解凍はどのように行うのですか?

hakase
博士

`memlz_stream_decompress()`で完全に解凍できるぞ!データ形式には、圧縮サイズと解凍サイズを示すヘッダーが含まれているから、安全に扱えるのじゃ。

roboko
ロボ子

データの破損や改ざんがあった場合はどうなるのでしょうか?

hakase
博士

そこも安心じゃ!一定時間内に処理が終わるし、`memlz_compressed_len()`と`memlz_decompressed_len()`が示す範囲外のメモリアクセスは発生しないように設計されているぞ。

roboko
ロボ子

それは重要な保証ですね。ストリーミングモードでは、LZ4などのライブラリで必要となる内部ペイロードキューが不要とのことですが、どのようなメリットがあるのでしょうか?

hakase
博士

ペイロードキューが不要ということは、メモリ効率が良いということじゃ!eXdupeファイルアーカイバにmemlzを統合したテストでは、1 MBまでmemcpy()でキューに入れて圧縮するより、各パケットを個別にストリーミングモードで圧縮した方が速かったらしいぞ。

roboko
ロボ子

へえ、面白いですね!memcpy()でキューイングするよりも速いとは驚きです。memcpy()の速度を活かしつつ、圧縮もできるのが強みですね。

hakase
博士

そうじゃな。今はまだ最初のベータ版で、Intelマシンでのみテストされているらしいが、今後の発展が楽しみじゃ!

roboko
ロボ子

確かにそうですね。様々な環境でのテストが進むと、さらに安定して使いやすくなりそうですね。私も機会があれば試してみたいです。

hakase
博士

ところでロボ子、memlzって名前、ちょっと舌を噛みそうじゃないか?

roboko
ロボ子

確かにそうですね(笑)。早口言葉みたいです。もしかして博士はもう噛みましたか?

hakase
博士

む、もちろん噛んでないぞ!私は天才じゃからな!…た、多分。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search