2

私は STXXL を使用するプロジェクトに取り組んでいます。これは、C++ STL ライブラリのコア バージョンではないことを理解しています。現在、私のプログラムは問題なく動作していますが、現在直面している問題は、プログラムの実行時に 2 GB 近くのメモリを使用することです (低から中サイズのデータ​​ セットで)。

私のプログラムでは、ディスク上の個々のファイルに保存されている 25 個の STXXL ベクトルを使用しています。私の .stxxl ファイルに関しては、現在、ディスク ファイルを動的に割り当てるように設定しています (ディスク サイズを 0 に設定することにより)。

それで、私の質問は次のとおりです。RAMではなくハードディスクを使用するようにSTXXLを明示的に取得する方法はありますか? または、このライブラリを使用する場合、この量のメモリ使用量が予想されますか?

誰でも提供できるアドバイスを事前に感謝します。

4

2 に答える 2

3

stxxl:vector の RAM 使用量について bobb_the_builder が言っていることは正しいです。

次のコードを参照してください。

#include <stxxl/vector>

int main()
{
    // create vector
    //stxxl::VECTOR_GENERATOR<int>::result vector[25];
    stxxl::VECTOR_GENERATOR<int, 1, 1, 1*1024*1024>::result vector[25];

    // fill vectors with integers
    for (size_t i = 0; i < 100 * 1024 * 1024 * 1024llu; ++i) {
        vector[i % 25].push_back(i);
    }

    return 0;
}

Linux では、プログラムの常駐メモリ サイズは、 which is を使用すると 27528 KiB に増加し、 which is を使用すると約 1.6 GiB に増加します。

Windows マネージャーは同じように表示されますか? これは Windows のみの STXXL バグでしょうか、それとも単にタスク マネージャーが異なるメモリ サイズを表示するだけなのでしょうか?

于 2013-12-16T09:04:01.567 に答える
2

テンプレートを使用して、投稿で言及しSTXXL::VECTOR_GENERATORた 25 を作成していると思いますか? STXXL::VECTOR_GENERATOR に関する STXXL ドキュメントでstxxl::vector説明されているように、一般にの内部メモリ使用量はstxxl::vector個々の構成 (つまりblock_size * page_size * cache_pages)によって異なります。それをすべて合計すると、予約済みの内部 (= メイン) メモリ消費量になります。私が知る限り、STXXL は、それらのテンプレート パラメーターに応じて、コンテナーが (可能であれば) キャッシュとして使用しているのと同じくらい多くの内部メモリを割り当てようとします。

:前述のテンプレート パラメータのデフォルト値は次のとおりです。

page_size = 4 
cache_pages = 8 
block_size = 2 MiB

その結果、合計メモリ消費量は25 * (2 MiB * 4 * 8) = 1600 MiBになり、報告された 2 GB のメモリ消費量の大部分を説明しています。

(注: どの data_type (ValueType) が STXXL ベクトルに格納されているかは、実際には重要ではありません。)

于 2013-12-09T18:54:52.303 に答える