2

私が理解しているように、それを使用するstd::make_sharedと、基になるオブジェクトと同時に参照カウント オブジェクトが作成されます。

ただし、smart_ptr が指すオブジェクト ポインターが 56 バイトより大きい場合、参照カウンターが別のキャッシュ ラインに配置されることはありません (キャッシュ ラインは 64 バイトであるため)。

4

1 に答える 1

6

注:キャッシュラインはすべてのプラットフォームで同じサイズではなく、ポインターのサイズも常に同じではありません..質問の数値に基づいて仮定を立てることに注意してください.


なぜstd::make_sharedですか?

std::make_shared3 つの (主な) 理由で存在します。

  • ref-counterと追跡対象のオブジェクトの両方に一度にメモリを割り当てる手段 (一般に、メモリの割り当てにはコストがかかります)。
  • std::shared_ptr;を構築および初期化するための例外セーフな方法。
  • コードの簡潔さ。

キャッシュラインとはstd::make_sharedどうですか?

正直なところ、これは の範囲と目的を超えていますstd::make_sharedC++ 標準は、「キャッシュライン」が何であるかを理解していません。標準で説明されている設計は、特定のプラットフォームを対象としていないような内容で書かれています。

ref-counterとオブジェクトが同じcache-line内に収まらないために *cache-misse* が発生したとしても、前述のすべての利点がありstd::make_shared、解決しようとしている仕事を実行します。

注: 「参照カウンターとオブジェクトをメモリ内で近くに保つ」ことは、ちょっとしたおまけであると言えます。

于 2014-05-21T04:45:25.463 に答える