конструкция boost управляемой разделяемой памяти заканчивается ошибкой шины

У меня есть код, который создаст большой сегмент управляемой разделяемой памяти с использованием ускорения c ++ (около 2 гигабайт). И если у нас недостаточно памяти на машине, она получит ошибку шины.

На самом деле ошибка возникает, когда я пытаюсь писать в разделяемую память с использованием функции построения. Когда я создаю сегмент, он не получает ошибок. Я уже проверил размер своего сегмента и свободный размер, и все они будут показывать значения, которые были бы достаточно для выделения памяти! (get_size возвращает 2000000000!). даже если в машине меньше этого!

Я знаю, что ОС заставляет программу думать, что памяти достаточно, но я должен запускать код на разных машинах, и он должен работать на всех из них. Я имею в виду, что он НЕ ДОЛЖЕН сбой, даже если памяти недостаточно, и у нас должно быть хорошее исключение, которое должно быть выброшено в этом случае. Не важно, достаточно памяти или нет. И должен быть способ узнать это программно.

Итак, мне было интересно, есть ли способ понять, какая запрашиваемая память существует, или нет "USING BOOST"?

Вот чего я хочу (или хотя бы имею в виду!)

// consider that we are going to create a shared memory segment with 2G size in a machine that only has 1G of RAM
boost::interprocess::managed_shared_memory segment(open_or_create, "name", 2000000000);
if (real_allocated_memory < actual_need)
    throw std::overflow_error("Not enough memory");
segment.find_or_construct(a huge object); // here is where I receive the error

person rezaebrh    schedule 27.11.2018    source источник
comment
Судя по моим поискам, кажется, что нет надежного решения с использованием библиотеки boost!   -  person rezaebrh    schedule 28.11.2018