問題タブ [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.

0 投票する
2 に答える
1060 参照

c++ - std::set と set::map のデフォルトのコンストラクターがヒープ割り当てを必要とするのはなぜですか?

これを試すと:

なるほどAllocating 1 objects

しかし、私には理解できません - なぜこのヒープ割り当てが必要なのですか? スタック メモリは他のコンテナ ( など) をデフォルトで構築するのに十分なのに、std::vectorなぜヒープ割り当てsetを必要とするのでしょうか?map

0 投票する
1 に答える
1344 参照

c++ - 共有メモリで std::set または std::map を使用する

私は、2 つの異なるプロセスを持つプロジェクトで作業しています。

  • 最初のプロセスは、すべてのデータを共有メモリ領域に割り当てる std::map または std::set に基づくキャッシュです。
  • 2 番目のプロセスは、共有メモリにアクセスできるプロデューサ/コンシューマであるため、データが必要なときはいつでも、要求されたデータを含む共有メモリの開始アドレスを unix パイプを介してキャッシュ プロセスに問い合わせます。

これまでのところ、私は 2 つのアプローチを思い付きました。1 つ目は std::set の割り当て関数を常に共有メモリに割り当てるように変更するか、マップの値としてその共有領域へのポインターを格納するより簡単な方法です。

何か案が?:D

ありがとう!!

0 投票する
1 に答える
282 参照

c++ - std::set insert() と find() からの書き込みと書き込みのデータ競合?

スレッド サニタイザーを試すために、意図的にデータ競合を含む小さな C++ プログラムを作成しました。確かに、tsan はエラーを検出します。しかし、私は生成されたメッセージに困惑しています...

  1. 書き込みと書き込みのデータ競合が報告されますが、読み取りと書き込みの競合が予想されます。find()が私のコンテナに書き込まれないことを望んでいたでしょう。constのバージョンを取得しようとしてさらに小さなコード調整を行うとset::find()、同じ書き込みと書き込みの競合が残るようです。
  2. これは、同じアドレスでの 4 バイトのアトミック書き込みと 8 バイトの書き込みの間の書き込み競合を示しています。コンテナ クラスの同じフィールドが 2 つの異なるアクセス タイプからアクセスされるのは奇妙に思えます。

find()STL コンテナーに書き込まないconst を使用するオプションはありますか?

これはテスト済みの C++ プログラムです。

そして、これは tsan 出力 (の一部) です:

フィードバックをありがとう、ジョス