partial_sum
このアルゴリズムの実用的な用途はどこにあるか言語?
他に興味深い/重要でない例やユースケースは何ですか?
ベストアンサー1
私はこれを、おもちゃのラムダ計算インタープリター内の単純なマークスイープ ガベージ コレクターのメモリ使用量を削減するために使用しました。
GC プールは、同じサイズのオブジェクトの配列です。目的は、他のオブジェクトにリンクされていないオブジェクトを削除し、残りのオブジェクトを配列の先頭に凝縮することです。オブジェクトはメモリ内で移動されるため、各リンクを更新する必要があります。これには、オブジェクトの再マッピング テーブルが必要です。
partial_sum
スイープが完了してメモリが解放されるまで、テーブルを圧縮形式 (オブジェクトごとに 1 ビット) で保存できます。オブジェクトが小さいため、メモリの使用量が大幅に削減されます。
- 使用されたオブジェクトを再帰的にマークし、ブール配列を設定します。
remove_if
マークされたオブジェクトをプールの先頭に凝縮するために使用します。- ブール値を使用し
partial_sum
て、新しいプールへのポインタ/インデックスのテーブルを生成します。- これが機能するのは、N 番目のマークされたオブジェクトの配列の先頭に N 個の 1 があり、プール インデックス N を取得するためです。
- プールを再度スイープし、再マップ テーブルを使用して各リンクを置き換えます。
解放されたばかりでまだホットなメモリにリマップ テーブルを配置すると、データ キャッシュにとって特に有利になります。