получил поддержку распределителя состояний в 2013 году, для выпуска 4.9.0.
час вхожу в общую память, используяboost::interprocess
.
Я определил несколькоstd::unordered_map
а такжеstd::unordered_set
типы как в следующем порядке:
#include <boost/interprocess/allocators/allocator.hpp>
#include <unordered_map> // NOT the boost implementation ...
...
namespace ipc = boost::interprocess;
/**
* allocator type needed to construct maps in shared memory
*/
typedef ipc::allocator<std::pair<const size_t, std::string>,
ipc::managed_shared_memory::segment_manager> OBJ_MAP_ALLOCATOR;
/**
* map type to construct maps in shared memory
*/
typedef std::unordered_map<size_t,
std::string,
std::hash<size_t>,
std::equal_to<size_t>,
OBJ_MAP_ALLOCATOR> OBJ_MAP_TYPE;
Я инициализировал их так:
ipc::managed_shared_memory segment;
// allocate segment etc ...
OBJ_MAP_ALLOCATOR alloc_inst(segment.get_segment_manager());
objMap = segment.find_or_construct<OBJ_MAP_TYPE> (ipc::unique_instance)(alloc_inst);
Это, кажется, работает нормально, я не нашел никаких проблем во время компиляции или во время выполнения (работа на MacOS,Apple LLVM version 9.1.0 (clang-902.0.39.1)
, со стандартом C ++ 14).
В документации Boost упоминаются только контейнеры Boost или реализации, специфичные для разных процессов. К сожалению, они не содержат неупорядоченных версий.
Итак, мне интересно, есть ли что-то проблематичное в использовании контейнеров STL по умолчанию с распределителями Boost? Может быть, на другой платформе?
Любая подсказка приветствуется!
Обновить:
Мне было интересно, работает ли он в другой среде, поэтому я написал минимальный пример на Coliru (который удивительно работает сstd::string
):