問題タブ [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.
java - Javaで同等のSTXXL
STXXLがC++で行うように、透過的に動作するJavaの巨大なデータセット用に設計されたコレクションフレームワークを探しています。
透過的にディスクにスワップする必要がありますが、プレーンなOSベースのVMスワッピングよりもはるかに効率的な方法です。StringBuffer/Stringドロップインの置き換えは大きなプラスになります。
c++ - 外部メモリ ベクトル
私は外部メモリのデータ構造を開発していますが、固定の RAM メモリを維持するために、(おそらく LRU 戦略を使用して) 自動的にスワッピングを行うベクトル構造にデータを配置する必要があります。stxxl ベクトル構造体を試してみましたが、問題は のような動的構造体を格納できないことstd::vector
です。これは機能しません:
この種の要素を処理できる外部メモリ構造のライブラリはありますか?
iphone - stxxl と cxx_constructor のオーバーライド
ベクターのバッキング ストアとして stxxl を使用しようとしています。何もしなくても、自動的に 1 ギガのディスク容量が割り当てられ、すべてが完全に機能します。しかし、それほど多くのスペースを割り当てる必要はありません。実際、最適な 512 MB から最小で 128 MB のストレージまで適切にスケーリングする必要があります。
残念ながら、私は目的の c クラスで定義された stxxl::vector を持っており、そのクラスのインスタンス化で cxx_constructor 関数が呼び出され、stxxl が起動され、好きかどうかに関係なくギグが割り当てられます。
クラスをインスタンス化する前に、cxx_constructor 呼び出しをオーバーライドして init を追加する方法はありますか? cxx_constructor によってインスタンス化される単純なオブジェクトを作成しようとしました。残念ながら、何らかの理由で cxx_constructor がクラスのコンストラクターを 2 回呼び出します。
そのクラスに静的を追加して、複数回インスタンス化されるのを防ぐ唯一のオプションはありますか? これは間違いなく、あまりエレガントではないオプションです。1つは、なぜ2回呼び出されるのか知りたいです。
どんな情報でも大歓迎です!
編集:これが私が書いたコードです。
次に、アプリ デリゲート内で次のように宣言します。
次に、stxxl::Config コンストラクター内でブレークポイントを使用してアプリケーションを実行すると、ブレークポイントが 2 回ヒットします。私はそれを他のどこにも宣言しません。cxx_constructor は、コンストラクターを 2 回呼び出します。
(独自の stxxl::config::init 関数を追加し、デフォルトの関数を空白にしたことも注目に値します)
編集 2 : コンストラクターのコードの周りに静的ブールを配置すると、二重の初期化が整理され、すべてが期待どおりに機能します。しかし、それは本当にゴミの解決策です:(
makefile - STXXL を使用した Makefile
作業中のソフトウェア プロジェクトに STXXL ライブラリを使用する必要がありますが、何らかの理由でテスト ファイルのコンパイルに問題があります。私はメイクファイルにあまり詳しくないので、いくつかのライブラリをリンクする際に混乱した可能性があります。
私が使用しているダミー ファイルは、Draw.h、Draw.cpp、および driver.cpp です。ご想像のとおり、Draw.h は Draw.cpp に実装されているメソッド draw() を宣言し、driver.cpp には main 関数が含まれ、Draw.h をインクルードして draw() を呼び出します。
私が使用しているメイクファイルは次のとおりです。
私が得ているエラーは
何か案は?
c++ - STXXLマップでのconstchar*の使用
私はそれを探しましたが、解決策を見つけることができませんでした。申し訳ありませんが、これはすでに投稿されています。
constchar*をconstchar*にマッピングするstxxl::map構造を作成する必要があります(最適なのは文字列から文字列ですが、stxxlコンテナは非PODを受け入れないことを認識しています)
constchar*のcomp_type構造体の定義に問題があります。誰かその例がありますか?
これが私が書いたものです:
c++ - stxxl アサーション `it != root_node_.end()' が失敗しました
stxxl マップに要素を挿入しようとすると、この assertion failed エラーが発生します。
アサーションエラー全体は次のとおりです。
resCache: /usr/include/stxxl/bits/containers/btree/btree.h:470: std::pair >, bool> stxxl::btree::btree::insert(const value_type&) [with KeyType = e_my_key, DataType = unsigned int, CompareType = comp_type, unsigned int RawNodeSize = 16384u, unsigned int RawLeafSize = 131072u, PDAllocStrategy = stxxl::SR, stxxl::btree::btree::value_type = std::pair]: アサーション `it != root_node_ .end()' が失敗しました。中止しました
何か案が?
編集:コードフラグメントは次のとおりです
Edit2 ここに詳細があります(MAX_QUERY_LENなどの定数は省略しています)
c++ - stxxl キューの使用時に「解放されるポインターが割り当てられませんでした」
私のコードは機能しているようです(上記のエラーのため、大きなデータセットでは試していません)。
コード:
私のシンプル.stxxl
は単純です:disk=./testfile,0,syscall
しかし、私のエラーは次のとおりです。
トラブルシューティングの方法がわかりません。この場合、メモリを解放する必要がありますか? 私はまだ C++ を学んでいるので、これが本当に基本的なものである場合は申し訳ありません (これは stxxl キューを使用する場合にのみ発生します)。
database - stxxl マップ
2 次元のポイントにインデックスを付けるためのストレージを探しています。より具体的には、ウェイ (またはエッジ) のジオメトリを OpenStreetMap に保存して、検索できるようにしたいと考えています。ストレージへのクエリは、ウェイの 2 つのエンドポイントに基づいてジオメトリを検索します。このクエリは、Dijkstra と同様のアルゴリズムによって検出されたパスのジオメトリを再構築するために実行されるため、ジオメトリ ルックアップの速度が重要になります。
私の場合、ノードは符号なしの整数であり、ジオメトリは文字列またはポイントのベクトルとしてエンコードできます。どちらの方法でも機能します。
ノードの数は約 10 億になるため、すべてをメモリに保持することはできません。そのため、外部ストレージまたはディスク ベースのストレージを見つけるとよいでしょう。
私はすでに Stxxl を試しましたが、文字列やベクトルなどの非 POD 型を値としてサポートしていないようです。
事前にご提案いただきありがとうございます
c++ - QtプロジェクトでのSTXXLの使用
生成されたmakefileにstxxl.mkファイルを含めるようにqmakeを取得するにはどうすればよいですか?
大きなファイル(> RAM)を処理するQtプロジェクトがあるため、STXXLを使用したいと考えています。STXXLのドキュメントには次のように書かれています。
アプリケーションの構築
ライブラリをコンパイルした後、いくつかのMakefile変数がSTXXL_ROOTディレクトリのstxxl.mk[...]に書き込まれます。このファイルは、アプリケーションのMakefileからインクルードする必要があります。
もちろん、makefileを手動で編集して行を追加することもできますがinclude /path/to/stxxl.mk
、.proファイル、つまりmakefileが変更されるたびにこれを行うのは非常に面倒です。
.proファイルでqmakeコマンドを使用していくつかの解決策をすでに検索しましたが、役に立ちませんでした。あるフォーラムでは、qmakeソースを編集して再コンパイルすることを提案しましたが、qmakeにこの「修正」がない他の人にプログラムを配布する場合、これは選択の余地がありません。
多分私は複雑にすることを考えていて、簡単な解決策があります。この組み合わせ(Qt + STXXL)で作業するときに、この問題を解決した人がここにいることを願っています。
注 この質問は、Qtで生成されたMakefileにMakefileを追加/追加することでまったく同じことを求めていましたが、解決策は私の問題に適合しません。
android - Android NDK r8b での STXXL のコンパイル
Android NDK r8bでSTXXLをコンパイルしようとしています(新しいr8c btwでも同じ問題があります)。
gnustl_static を使用してコンパイルしています。
C++11のサポートが必要なので、最初は設定してみました
しかし、これにより uint64_t に関するエラーが発生しました。
だから私はフラグを
これはかなり役立ちますが、コンパイルを開始すると、gnu stl に関連するエラーが発生します。
また、この _Arg パラメータに関連するエラーがさらに多く発生します。
したがって、最初のものを見ると、関数は次のようになります。
問題がどこで発生しているのか本当に理解できません。gnu++11 は を定義していません__GXX_EXPERIMENTAL_CXX0X__
か? それとも、どこかでうまく使われていないことが問題なのでしょうか? 何が問題を引き起こしているのか、私は非常に混乱していますか?iPhoneのclangでgnu ++ 11を使用してSTXXLをコンパイルしていますが、iPhoneはおそらく別のSTL実装を使用していると思います。この問題を解決する方法について何かアイデアを持っている人はいますか?
さらに情報が必要な場合は、お尋ねください。
編集:ここのコメントの1つにさらに私のapplication.mkがあります
これは私のandroid.mkです:
編集:興味深いことに、投稿した stl_tree.h 関数#error temp
のブロック内#ifdef __GXX_EXPERIMENTAL_CXX0X__
コンパイラはその部分でエラーをスローしません...そのため、おそらく私の問題の原因である定義が設定されません。また、特に a を追加しました-D__GXX_EXPERIMENTAL_CXX0X__
が、違いはありません (それは undef されているかのようです)。