次のタスクのために、高速/ロスレス/固定間隔の圧縮アルゴリズムを探しています。
私は組み込みシステムを持っています。メモリ/フラッシュ リソースが不足しています。
そのためのコア ダンプを生成し、結果をフラッシュに保存したり、低速のシリアル ライン経由で吸い出したりしたいと考えています。
基本的に必要なのは、ヒープ、スタック、.data、および .bss セグメントと、いくつかのメモリ マップ レジスタだけです。
デバイスは Leon Sparc Softcore です。
さて、このデータは、それを示すいくつかの奇妙な点として
- 通常の LZW / Zlib / ... 圧縮ライブラリではうまくいきません。(自然言語コーパスではありません)。
- Sparc はアラインメントに執着しています。すなわち。.bss および .data セグメント内のすべての項目が、(事実上) 8、16、32、64 ビットのアドレス境界に対応して配置された 8、16、32、または 64 ビットの int であることを保証できます。
- 圧縮コード用に小さな固定スペースを予約する必要があります。
- これは 32 ビット マシンで、bss とデータ セグメントのサイズは 4 GB よりもはるかに小さいです。
- システム内のほとんどの 32 ビット値はシンボルのアドレスです。すなわち。4 ギガの可能な値の非常に小さなサブセット。
私の現在の計画は... .bss / .data セグメント全体をスキャンし、16 ビット値の完全なヒストグラムを計算します。
これから、完全なハフマン エンコーディングを取得できます。しかし、32 ビット / 64 ビット値の内部構造を熟考することで、もっとうまくやれると思います。(例: ビットの最上位半分の変動性は、最下位ビットの変動性よりもはるかに小さい。)
そして、ポインタ/提案/既存の仕事?