私が理解しているように、それを使用するstd::make_sharedと、基になるオブジェクトと同時に参照カウント オブジェクトが作成されます。
ただし、smart_ptr が指すオブジェクト ポインターが 56 バイトより大きい場合、参照カウンターが別のキャッシュ ラインに配置されることはありません (キャッシュ ラインは 64 バイトであるため)。
私が理解しているように、それを使用するstd::make_sharedと、基になるオブジェクトと同時に参照カウント オブジェクトが作成されます。
ただし、smart_ptr が指すオブジェクト ポインターが 56 バイトより大きい場合、参照カウンターが別のキャッシュ ラインに配置されることはありません (キャッシュ ラインは 64 バイトであるため)。
注:キャッシュラインはすべてのプラットフォームで同じサイズではなく、ポインターのサイズも常に同じではありません..質問の数値に基づいて仮定を立てることに注意してください.
なぜstd::make_sharedですか?
std::make_shared3 つの (主な) 理由で存在します。
std::shared_ptr;を構築および初期化するための例外セーフな方法。キャッシュラインとはstd::make_sharedどうですか?
正直なところ、これは の範囲と目的を超えていますstd::make_shared。C++ 標準は、「キャッシュライン」が何であるかを理解していません。標準で説明されている設計は、特定のプラットフォームを対象としていないような内容で書かれています。
ref-counterとオブジェクトが同じcache-line内に収まらないために *cache-misse* が発生したとしても、前述のすべての利点がありstd::make_shared、解決しようとしている仕事を実行します。
注: 「参照カウンターとオブジェクトをメモリ内で近くに保つ」ことは、ちょっとしたおまけであると言えます。