2

巨大なデータ セットを処理しようとして、便利な STXXLライブラリを使用してきましたが、多次元ベクトルを使用/生成しようとすると、わずかな問題が発生しました。

次のプログラムは、システムをしばらくフリーズさせた後、強制終了します。コマンドラインに出力がありません:

typedef stxxl::vector<int> vector;
typedef stxxl::vector<vector> vector_2d;
typedef stxxl::vector<vector_2d> vector_3d;    

vector_3d numbers(5);

for (auto & rc : numbers){
    rc = vector_2d(5);
    for (auto & r : rc ){
        r = vector(5);
        std::generate(r.begin(), r.end(), custom_random);
    }
}
for (auto rc : numbers){
    for(auto r : rc){
        for(auto n : r){
            std::cout << n << " ";
        }
        std::cout << std::endl;
    }
    std::cout << "-----" << std::endl;
}

デバッガーを使用してプログラムをステップ実行すると、フリーズが次の行で発生することがわかります。

vector_3d numbers(5);

STXXL のバージョン 1.3.1 を使用し、GCC 4.8.1 を使用して Linux でコンパイルしています。ここで何が欠けているのかわかりません。ベクターをSTDバージョンに変更すると、機能します。2D ベクトルに縮小した場合にも機能します。

編集:STXXL(v 1.4.0)の最新の安定版リリースも試しましたが、役に立ちませんでした。同じ問題が発生します。

4

2 に答える 2

3

STXXL FAQの「Parameterizing STXXL Containers」セクションによると、sstxxl::vector<stxxl::vector<T> >は無効な構造です。

STXXL コンテナーには、POD タイプのみを含めることができます。

于 2014-06-06T16:06:57.453 に答える