STL の「partial_sum」の実用的な用途は何ですか? 質問する

STL の「partial_sum」の実用的な用途は何ですか? 質問する

partial_sumこのアルゴリズムの実用的な用途はどこにあるか言語?

他に興味深い/重要でない例やユースケースは何ですか?

ベストアンサー1

私はこれを、おもちゃのラムダ計算インタープリター内の単純なマークスイープ ガベージ コレクターのメモリ使用量を削減するために使用しました。

GC プールは、同じサイズのオブジェクトの配列です。目的は、他のオブジェクトにリンクされていないオブジェクトを削除し、残りのオブジェクトを配列の先頭に凝縮することです。オブジェクトはメモリ内で移動されるため、各リンクを更新する必要があります。これには、オブジェクトの再マッピング テーブルが必要です。

partial_sumスイープが完了してメモリが解放されるまで、テーブルを圧縮形式 (オブジェクトごとに 1 ビット) で保存できます。オブジェクトが小さいため、メモリの使用量が大幅に削減されます。

  1. 使用されたオブジェクトを再帰的にマークし、ブール配列を設定します。
  2. remove_ifマークされたオブジェクトをプールの先頭に凝縮するために使用します。
  3. ブール値を使用しpartial_sumて、新しいプールへのポインタ/インデックスのテーブルを生成します。
    • これが機能するのは、N 番目のマークされたオブジェクトの配列の先頭に N 個の 1 があり、プール インデックス N を取得するためです。
  4. プールを再度スイープし、再マップ テーブルを使用して各リンクを置き換えます。

解放されたばかりでまだホットなメモリにリマップ テーブルを配置すると、データ キャッシュにとって特に有利になります。

おすすめ記事