問題タブ [allocator]
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++ - allocator.constructループはstd::uninitialized_copyと同じですか?
このコンテキストでT
は、特定のタイプでありallocator
、そのタイプのアロケータオブジェクトです。デフォルトではそうですstd::allocator<T>
が、これは必ずしも正しいとは限りません。
によって取得されたメモリのチャンクがありますallocator.allocate(n)
。オブジェクトのコンテナもcon
ありT
ます(たとえば、std::vector<T>
)。T
そのメモリのチャンクをオブジェクトで初期化したい。
メモリのチャンクの場所はに保存されT* data
ます。
これらの2つのコード例は常に同じですか?
そして、これらの2つについては?
c++ - 標準準拠のカスタム アロケータ
allocate
メソッドに 0 が渡された場合に例外をスローしても問題ありませんか?
ありがとうございました。
PS
n == 0 の場合、戻り値は規定されていません。
allocate
例外をスローしてはならないということですか?n==0 でスローが許可されていない場合、標準で明確に説明されていると思います。
compression - インメモリ圧縮によるアロケータ
インメモリ圧縮とメモリアロケータの組み合わせに関するプロジェクト/少なくともいくつかの研究はありますか(もちろん、ある程度の速度を犠牲にして)?
たとえば、シナリオを想像してみてください。処理しなければならない巨大なツリーがあります。このツリーはメモリに収まりません。圧縮アロケータを使用すると、ほとんどすべてのツリーに適合できます。
もちろん、一度にツリーを構築せずに反復アプローチを使用することもできますが、私の質問は純粋に理論的なものです (今日の場合)。
おそらく逆参照には、アロケーターが選択した領域をアンパックできるように、特別なマクロ/テンプレートが必要になるでしょう。しかし、ある地域が別の地域などを参照している場合はどうなるでしょうか? おそらく管理された言語でのみ解決される、非常に複雑なアルゴリズムがあるに違いありません (しかし、Boehm は C++ の GC を作成することができました!)
それとも、(保存されたメモリと比較しても) 非常に複雑/遅いため、まったく価値がないのでしょうか? 特にガベージ コレクション環境では、仮想メモリとスワッピングが非常に遅くなる場合があります。最近、1 GB のアプリで OS 全体が応答しなくなっていました...そのため、カーネルレベルのメカニズムは必ずしも効率的ではありません。
あなたはそれを考えることができます(私はまだそれが非常にばかげた考えではないことを保証しようとしています)反対の高速ユーザーモードfutex対低速ネイティブミューテックス、高速ユーザーモードグリーンスレッド(Erlangのように、最大2000万の同時プロセスでマシン) と低速のネイティブ スレッドなど。
c++ - アロケータ型引数の C++ デザイン パターン
C++03 標準ライブラリは、アロケータとなるクラスに型を渡すときに、単純なテンプレート型引数を使用します。これは、テンプレートが C++ でどのように機能するかによって可能になります。ただし、これはそれほど単純ではなく、特に非標準型の場合、型定義が正確にどのように見えるべきかがわからない場合があります。
アダプタ クラスをインストレッドで使用することをお勧めします。私が何を意味するかを示すために、例を作成しました。
実装は明らかであるべきです。使用例をいくつか示します。
これは通常の方法と比較して改善されていますか?
c++ - tr1 の unordered_map のカスタム アロケーター
unordered_map のカスタム アロケータに関していくつか問題があります。大規模なデータセットがあり、文字列をキーとしてハッシュする必要があります。そのため、カスタム メモリ アロケータを提供すると速度が最適化されることがわかりました。しかし、どうすればそれを行うことができますか?(SOを確認しましたが、カスタムハッシュ関数などに関連するものはいくつかありますが、カスタムアロケーターの使用に関するものは何も見つかりませんでした)
unordered_map::size() は何を返しますか? それは、最長の制御されたシーケンスだと言います。私はそれが何を意味するのか混乱しました。それはバケット自体の数ですか、それとも何か他のものですか?
どうもありがとう
c++ - C++ のデフォルト アロケータ - サイズがアロケートの呼び出しに渡されたサイズと等しくない場合はどうなりますか?
20.6.9:
- 必須: p は、allocate() から取得したポインター値でなければなりません。n は、p を返した allocate の呼び出しに最初の引数として渡された値と等しくなければなりません。
- 効果: p によって参照されるストレージの割り当てを解除します。
- 備考: ::operator delete(void*) (18.6.1) を使用しますが、この関数がいつ呼び出されるかは不明です。
n
返された allocate の呼び出しに最初の引数として渡された値と等しくない場合はどうなりp
ますか? 割り当てを解除しませんか? 投げるstd::bad_alloc
?...
編集: 「何が起こるべきか」で私が実際に意味したのは、カスタム実装でスローまたはアサートしても問題ないでしょうか?
c++ - STL コンテナー ライブラリ - アロケーター クラスの異なるインスタンスで割り当て/割り当て解除を呼び出すことは合法ですか?
まず、そうではないと思います。しかし、デバッグ モードの MSVC 10.0 でこのような動作を確認しました。allocator
ユーザーが同じインスタンスに割り当てられたポインターのみを に渡すことに依存するカスタム クラスを使用していますdeallocate
。ただし、リリース モードでは、私のコードは機能しています。
これはバグですか、それとも私が間違っていますか?
c++ - STL コンテナー内のステートフル アロケーターのコンパイラー サポート
新しい C++11 標準では、STL 実装でコンテナー内のステートフル アロケーターをサポートする必要があります。現在、主要な STL 実装 (Visual Studio 2008、2010、libstdc++) はこの要件に準拠していますか? これについては、MSDN または libstdc++ のドキュメントで何も見つかりませんでした。