1

次のように定義されmanaged_shared_memoryたマップコンテナを保持するオブジェクトがあります。SharedMap

typedef std::pair<std::string, T> ValueType;
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator;
typedef map<std::string, T, std::less<std::string>, ShmemAllocator> SharedMap;

私の問題は、使用している共有メモリのサイズを決定する必要があることです。マップのキーは不明なサイズのstd::stringであり、データは不明なサイズのテンプレートタイプであり、各データのサイズは異なります。

誰かが私が使用しているメモリを追跡する方法を提案できますか?

私はboost::interprocessを初めて使用するので、どんな提案も大いに役立ちます。

4

1 に答える 1

3

例外処理を使用して問題を解決しました。bad_alloc例外がスローされるまでマップに挿入します。例外をキャッチし、共有メモリのサイズを変更します。


static bool grow(const char *shmname, size_type extra_bytes)のメンバー関数であるはずのメソッドを使用しましたmanaged_shared_memory

于 2012-05-15T20:31:58.997 に答える