問題タブ [stxxl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - STXXL ディスク割り当てエラー Windows7
Windows 7 - MSVC12 Express で stxxl を使用しようとしています。
構成ファイル (.stxxl.txt) を提供しない場合: プログラムは
[STXXL-MSG] STXXL v1.4.0 (prerelease/) [STXXL-ERRMSG] 警告: 構成ファイルが見つかりません。[STXXL-ERRMSG] デフォルトのディスク構成を使用しています。[STXXL-MSG] ディスク 'C:\Users\Owner\AppData\Local\Temp\stxxl.tmp' が割り当てられ、スペース: 1000 MiB、I/O 実装: wincall autogrow delete_on_exit queue=0
しかし、エラーをスローする前に長いサイクルを経ます -
「Microsoft C++ 例外: メモリ位置 0x0028DF50 の std::bad_alloc」
「disk=c:/stxxl.tmp,4G,wincall delete」エントリを含む構成ファイル (.stxxl.txt) を含めると、エラーが発生します。
[STXXL-MSG] STXXL v1.4.0 (プレリリース/) [STXXL-MSG] パス=c:\stxxl.tmp モード=28 での CreateFile() エラー、DI RECT モードなしで再試行。[STXXL-MSG] ディスク 'c:\stxxl.tmp' の割り当てエラー、スペース: 3814 MiB、I/O 実装: wincall delete_on_exit queue=0
追加情報:
を。
私が使用するヘッダーの stxxl 固有の情報のみ: #include
b. メインにヒットしません-最初の行にブレークポイントを配置したためです。
4 GB のメモリを搭載した Windows m/c で実行して、これを学習しようとしています。私はこれが初めてです、助けてもらえますか?
前もって感謝します。
02/23/14: 以下は、STXXL の test_vector の例での宣言の例です (エラーを引き起こす私の宣言は、うまく機能する STXXL の test_vector.cpp に追加されます。これにより、main に入る前でも上記のようにエラーが発生します。それが起こります。コードで「ベクトル E」を宣言すると。
c++ - 内部メモリへのプレーン ポインタを格納する構造体を stxxl コンテナに格納できないのはなぜですか?
stxxl
FAQで、私はこれを見つけました:
STXXL コンテナーのパラメーター化
stxxl::vector のような STXXL コンテナ型は、POD である値型 (つまり、仮想関数、ユーザー定義のコピー代入/デストラクタなど) でのみパラメーター化でき、内部メモリへの参照 (ポインターを含む) を含みません。 . 通常、「複雑な」データ型はこの要件を満たしていません。
stxxl::vector<std::vector<T> >
これが、とstxxl::vector<stxxl::vector<T> >
が無効な理由です。必要に応じて、 を使用するstd::vector<stxxl::vector<T> >
か、インデックス計算を行って 2 次元配列をエミュレートします。
コンテナは、コンテナのサイズ変更時に含まれる要素のコンストラクタまたはデストラクタを呼び出さないため、使用できないことは完全にstxxl::vector<std::vector<T> >
理にかなっています。stxxl
しかし、次のような構造体を格納するにはどうすればよいでしょうか。
a
が指すオブジェクトがインスタンスが存在する限り有効であることを保証する場合、これをstxxl::vector<S>
に格納する際の問題は何ですか? の特定のインスタンスをディスクに移動する必要がある場合、ポインタの値がディスクに書き込まれます。後で、ポインター値が復元され、使用できるようになります。明らかに、ポインター値はマシン依存であり、インスタンス依存でもありますが、これは、ポイントされたオブジェクトの有効期間を処理しても問題でしょうか? シリアル化されたオブジェクトをソケット経由で送信していません。また、シリアル化されたオブジェクトを後で使用するためにデータベースに保存していません。struct
stxxl::vector<S>
S
a
何か不足していますか?
編集:誰かがポインティをコピーしないことを思い出させたので、後でstxxl
のインスタンスを取得すると、ガベージへのポインターを取得する可能性があります。struct S
そんなこと知ってる。ポインティがプログラムの存続期間全体にわたって有効であることを保証します。
c++ - C++ で大量のデータを処理するには、アプローチが必要です
だから私はSQLite3データベースに変換したようなCSV形式の1GBファイルを持っています
12列あることを除いて。ここで、このデータを読み取って並べ替え、出力用に再フォーマットする必要がありますが、これを実行しようとすると、(ベクターを使用して) RAM が不足しているように見えます。私はそれを SQLite から読み込み、ファイルの各行を構造体に格納し、それを両端キューにプッシュします。私が言ったように、RAM の使用量が 2GB に近づくとメモリが不足し、アプリがクラッシュします。STXXL を使用してみましたが、POD 以外の型のベクトルをサポートしていないようです (したがって、long int、double、char などである必要があります)。価値。
基本的に、特定の列に同じ値を持つすべての「行」をグループ化する必要があります。つまり、1 つの列に基づいてデータを並べ替えてから、それを操作する必要があります。
すべてを読み取る方法、または少なくとも並べ替える方法についてのアプローチはありますか? 私は SQLite3 でそれを行いますが、時間がかかるようです。おそらく私は間違っています。
ありがとう。
c++ - std::string を stxxl::map のキーとして使用する方法
std::string を stxxl::map のキーとして使用しようとしています。10 ~ 100 程度の少数の文字列の場合、挿入は問題ありませんでした。しかし、そこに約100000の多数の文字列を挿入しようとすると、セグメンテーション違反が発生します。
コードは次のとおりです。
ここでは、より多くの文字列を挿入できない理由を特定できません。「1377」を挿入すると、正確にセグメンテーション違反が発生します。さらに、任意の数の整数をキーとして追加できます。文字列の可変サイズがこの問題を引き起こしているのではないかと思います。
また、文字列の何を返すのか理解できませんmax_value
。単純に空の文字列を返しました。
c++ - STXXL 多次元ベクトルによりプログラムがフリーズする
巨大なデータ セットを処理しようとして、便利な STXXLライブラリを使用してきましたが、多次元ベクトルを使用/生成しようとすると、わずかな問題が発生しました。
次のプログラムは、システムをしばらくフリーズさせた後、強制終了します。コマンドラインに出力がありません:
デバッガーを使用してプログラムをステップ実行すると、フリーズが次の行で発生することがわかります。
STXXL のバージョン 1.3.1 を使用し、GCC 4.8.1 を使用して Linux でコンパイルしています。ここで何が欠けているのかわかりません。ベクターをSTDバージョンに変更すると、機能します。2D ベクトルに縮小した場合にも機能します。
編集:STXXL(v 1.4.0)の最新の安定版リリースも試しましたが、役に立ちませんでした。同じ問題が発生します。