Какой объем памяти следует выделить «managed_shared_memory»? (boost)

Я ищу окончательный ответ (если он действительно существует) о том, сколько памяти должно быть выделено при создании статических блоков общей памяти с помощью boost :: interprocess managed_shared_memory . Даже официальные примеры , кажется, выделяют произвольно большие блоки памяти.

Рассмотрим следующую структуру:

// Example: simple struct with two 4-byte fields
struct Point2D {
  int x, y;
};

Моя первоначальная реакция такова, что необходимый размер будет 8 байтов или sizeof (Point2D) . Это ужасно терпит неудачу, когда я пытаюсь построить объект, что приводит к сбою сегментов во время выполнения.

// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));

Какая операция чтения / записи вызывает сбои сегментов? Стековые операции? Временно выделить в segment.construct () ? Сколько накладных расходов необходимо при выделении разделяемой памяти?

Методом проб и ошибок я обнаружил, что умножение размера на 4 может работать для приведенной выше структуры, но разваливается, когда я начинаю добавлять дополнительные поля в свою struct . Так что это пахнет плохим взломом.

Кто-то может возразить, что «память дешевая» на современном ПК, но я не согласен с этой философией и не люблю выделять больше, чем мне нужно, если я могу этого избежать. Вчера я покопался в документации по Boost и не нашел никаких рекомендаций. Давайте узнаем что-то новое сегодня!

11
задан Courtney Christensen 12 November 2010 в 16:39
поделиться