1

インメモリ圧縮とメモリアロケータの組み合わせに関するプロジェクト/少なくともいくつかの研究はありますか(もちろん、ある程度の速度を犠牲にして)?

たとえば、シナリオを想像してみてください。処理しなければならない巨大なツリーがあります。このツリーはメモリに収まりません。圧縮アロケータを使用すると、ほとんどすべてのツリーに適合できます。

もちろん、一度にツリーを構築せずに反復アプローチを使用することもできますが、私の質問は純粋に理論的なものです (今日の場合)。

おそらく逆参照には、アロケーターが選択した領域をアンパックできるように、特別なマクロ/テンプレートが必要になるでしょう。しかし、ある地域が別の地域などを参照している場合はどうなるでしょうか? おそらく管理された言語でのみ解決される、非常に複雑なアルゴリズムがあるに違いありません (しかし、Boehm は C++ の GC を作成することができました!)

それとも、(保存されたメモリと比較しても) 非常に複雑/遅いため、まったく価値がないのでしょうか? 特にガベージ コレクション環境では、仮想メモリとスワッピングが非常に遅くなる場合があります。最近、1 GB のアプリで OS 全体が応答しなくなっていました...そのため、カーネルレベルのメカニズムは必ずしも効率的ではありません。

あなたはそれを考えることができます(私はまだそれが非常にばかげた考えではないことを保証しようとしています)反対の高速ユーザーモードfutex対低速ネイティブミューテックス、高速ユーザーモードグリーンスレッド(Erlangのように、最大​​2000万の同時プロセスでマシン) と低速のネイティブ スレッドなど。

4

1 に答える 1

0

仮想メモリの圧縮に関するいくつかの関連するアイデアについては、仮想メモリ システムにおける圧縮キャッシュの事例を参照してください。このアイデアの Linux 実装があります ( compcache )。

アロケータで圧縮を行うことさえ理にかなっているわけではありません。アロケーターの仕事は、割り当てを要求したバイト数を返すことです (そして、ヒープの断片化やその他すべてのジャズを回避します)。そのメモリにどのデータを入れるかはわかりません。メモリが非常に不足している場合は、アプリケーションでメモリ内圧縮を実行する必要があります。

インメモリ圧縮の良い例は、ここに記載されているRedisが使用する巧妙なトリックで見ることができます。

于 2011-06-02T21:57:38.050 に答える