3

次のようになります。

MyType * pMy = my_segment->construct<MyType>(anonymous_instance)();
my_segment->destroy_ptr(pMy);

MyTypeは典型的な構造体で、my_segmentは正しく構築されています boost:: interprocess ::managed_shared_memory * は、同等のものより約 10 倍遅くなります。

MyType * pMy = new MyType();
delete pMy;

私はこれを期待していませんでした。2 つの割り当てアルゴリズムは、実装とパフォーマンスが類似している必要があります。このような大きな違いには何か正当な理由があるのでしょうか。

編集:テストは膨大な回数の反復で実施されました。

4

1 に答える 1

0

複数の割り当てを試して、それらがすべて遅いのか、それとも最初だけなのかを確認してください。最初のページだけが遅い場合は、共有メモリをバックアップするページをコミットする必要がある (予約するだけではない) ことが原因である可能性があります。ページがコミットされている場合でも、(ページ/スワップ ファイルから) ページインする必要がある可能性があります。

初期割り当てをむき出しにする遅さは、高度に調整されたフリーストアアロケーター (つまり、新しいもの) と、boost が共有メモリセグメントの「割り当て」を管理するために使用するメカニズム (たとえば、boost は移植可能でより高価な同期を使用する可能性がある) に起因する可能性があります。割り当てをシリアル化するメカニズム)。

于 2011-10-03T15:57:42.433 に答える