問題タブ [stdset]
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++ - std::set と set::map のデフォルトのコンストラクターがヒープ割り当てを必要とするのはなぜですか?
これを試すと:
なるほどAllocating 1 objects
。
しかし、私には理解できません - なぜこのヒープ割り当てが必要なのですか? スタック メモリは他のコンテナ ( など) をデフォルトで構築するのに十分なのに、std::vector
なぜヒープ割り当てset
を必要とするのでしょうか?map
c++ - 共有メモリで std::set または std::map を使用する
私は、2 つの異なるプロセスを持つプロジェクトで作業しています。
- 最初のプロセスは、すべてのデータを共有メモリ領域に割り当てる std::map または std::set に基づくキャッシュです。
- 2 番目のプロセスは、共有メモリにアクセスできるプロデューサ/コンシューマであるため、データが必要なときはいつでも、要求されたデータを含む共有メモリの開始アドレスを unix パイプを介してキャッシュ プロセスに問い合わせます。
これまでのところ、私は 2 つのアプローチを思い付きました。1 つ目は std::set の割り当て関数を常に共有メモリに割り当てるように変更するか、マップの値としてその共有領域へのポインターを格納するより簡単な方法です。
何か案が?:D
ありがとう!!
c++ - std::set insert() と find() からの書き込みと書き込みのデータ競合?
スレッド サニタイザーを試すために、意図的にデータ競合を含む小さな C++ プログラムを作成しました。確かに、tsan はエラーを検出します。しかし、私は生成されたメッセージに困惑しています...
- 書き込みと書き込みのデータ競合が報告されますが、読み取りと書き込みの競合が予想されます。
find()
が私のコンテナに書き込まれないことを望んでいたでしょう。const
のバージョンを取得しようとしてさらに小さなコード調整を行うとset::find()
、同じ書き込みと書き込みの競合が残るようです。 - これは、同じアドレスでの 4 バイトのアトミック書き込みと 8 バイトの書き込みの間の書き込み競合を示しています。コンテナ クラスの同じフィールドが 2 つの異なるアクセス タイプからアクセスされるのは奇妙に思えます。
find()
STL コンテナーに書き込まないconst を使用するオプションはありますか?
これはテスト済みの C++ プログラムです。
そして、これは tsan 出力 (の一部) です:
フィードバックをありがとう、ジョス