2

私は次のことをしようとします:

boost::interprocess ライブラリを使用して共有メモリに「大きな」配列 (1 000 000 + オブジェクト) を作成します。

私のコードには以下が含まれています:

managed_shared_memory testarray(create_only, "Test", 45000000);

typedef std::pair<SingleField, uint32_t> TestType;
TestType * test = testarray.construct<TestType>("TestArray")[45000000];

私の質問は、このブースト関数の戻り値の型をどのように把握するのですか?

上記と同じことを次のように行うと、 "::pair の代わりに SingleField が機能しないようですが、2 番目のコンテナーは必要ありません。必要なのは 1 つだけですが、1 つでは機能しません!

eclipse の出力は、どういうわけか私には難解です。ブーストを使用して以来、このような問題のために何度か停止されましたが、関数が返す「タイプ」を簡単に把握する方法はありますか? (私は Java から来たので、 Object x という「単純な」定義を使用することに慣れています) 特定の関数が返す型を特定できれば、私が自分で作成したすべての関数を使用して、実際に満足できます。シンプルですが、このライブラリには問題があるようです。

2 番目の質問: なぜこれらの例は常に "type" のペアになっているのですか? ライブラリの前提条件ですか?

-> #include を使用してみましたが、Eclipse はその std::pair を教えてくれます。問題は、なぜ T* なのかということです。これは開始セグメントアドレスですか?

お時間とご回答ありがとうございます。

エクリプス出力:

Multiple markers at this line
- unused variable test
- cannot convert const 
 boost::interprocess::detail::named_proxy<boost::interprocess::segment_manager<char, 
 boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, 
 boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, Field, false> to 
 SharedMemoryInitializer::Create()::TestType* in initialization

ブースト ライブラリのマニュアルを何度か読みましたが、間違ったサイトやページを見ている可能性があります。見逃している情報を提供していただければ幸いです。

http://www.boost.org/doc/libs/1_42_0/doc/html/interprocess/quick_guide.html#interprocess.quick_guide.qg_interprocess_container

4

1 に答える 1

0

私の見解では、コードには 2 つの大きな問題があります。

  • TestTypeおそらくあなたが望むものではないタイプの45000000オブジェクトを割り当てているようです(TestTypeインスタンスごとに1バイトしか必要ない場合を除く):

    TestType * test = testarray.construct<TestType>("TestArray")[45000000];

  • ドキュメント (*) によると、コンストラクター呼び出しにかっこを提供する必要があります (2 番目のバージョンを使用しています)。 TestType * test = testarray.construct<TestType>("TestArray")[45000000]();

    TestTypeパラメータのないコンストラクタがあると思います。

(*) http://www.boost.org/doc/libs/1_46_1/doc/html/interprocess/managed_memory_segments.html#interprocess.managed_memory_segments.managed_memory_segment_features.allocation_types

于 2012-05-14T13:26:58.130 に答える