巨大なデータ セットを処理しようとして、便利な 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)の最新の安定版リリースも試しましたが、役に立ちませんでした。同じ問題が発生します。