создание управляемой разделяемой памяти boost приводит к «ошибке шины» - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть код, который собирается создать большой сегмент на управляемой разделяемой памяти с использованием C ++ Boost (около 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
...