Я пытаюсь отобразить std :: unordered_map с промежуточным процессом boost. С Windows все отлично работает. На Linux я получаю ошибку сегментации.
using namespace boost::interprocess;
struct State {
uint8_t state = 0;
State(uint8_t _state) {
state = _state;
}
};
managed_mapped_file file(open_or_create, "MySharedMemory", 65536);
typedef uint32_t KeyType;
typedef State MappedType;
typedef std::pair<const KeyType, MappedType> ValueType;
typedef boost::interprocess::allocator<ValueType, boost::interprocess::managed_mapped_file::segment_manager> UnorderedMapAllocator;
typedef boost::unordered_map<KeyType, MappedType, boost::hash<KeyType>, std::equal_to<KeyType>, UnorderedMapAllocator> unordered_map;
unordered_map* map = file.find_or_construct<unordered_map>("fault_states")(3, boost::hash<KeyType>(), std::equal_to<KeyType>(), file.get_segment_manager());
uint32_t size = (uint32_t)map->size();
for (uint32_t i = size; i < size + 100; ++i) {
State state(46);
map->insert(ValueType(i, state));
}
for (auto x : *map) {
std::cout << x.first << " ";
std::cout << x.second.state << std::endl;
}
При первом запуске все работает нормально. На втором прогоне я получаю ошибку сегментации. Если вместо этого я использую boost :: unordered_map, то все работает нормально, но мне нужно использовать стандартную версию
Boost Version 1.6.4 G cc Версия 7.4.0