Безопасно ли использовать boost:: опционально в межпроцессной памяти?

Пожалуйста, рассмотрите следующую структуру:

struct ThingThatWillGoInSharedMemory {
    boost::optional<int> opt_value;
};

Я использую boost:: interprocess для создания общей области памяти. Насколько я понимаю, boost:: option заключался в том, что это был дискриминационный союз, а не обнуляемый указатель. В качестве контрпримеров такие вещи, как std:: map и std:: vector, которые используют кучу, нуждаются в явном распределителе, чтобы использовать их в межпроцессной памяти, но boost:: необязательный, я был совершенно уверен, что не использует кучу и эквивалентен пишу:

struct ThingThatWillGoInSharedMemory {
    bool value_initialised;
    int value;
}

Так что его можно использовать из коробки. Я был бы рад, если бы кто-то подтвердил это - я не видел, чтобы случай между процессами был явно упомянут в документах boost:: факультативного, только подразумеваемого.

1 ответ

Решение

Ты прав. Boost:: необязательные обертки значений, а не использование косвенного указателя. Это означает, что простые старые объекты данных, такие как целые, могут жить в областях общей памяти. В общем случае объекты, использующие кучу, не могут использоваться таким образом.

Из буста:: дополнительная документация:

Следует помнить о разнице между необязательным и указателем, особенно потому, что семантика реляционных операторов различна: так как необязательный параметр является оберткой значения...

Boost:: необязательные обертки значения, вместо использования указателей и косвенного Ваша базовая модель надстройки памяти boost:: option более или менее правильна. Фактическая реализация использует объединение, объединяющее общий выровненный байтовый буфер, чтобы избежать необходимости инициализировать объект T. Библиотека использует оператор & (address-of) для получения локально сопоставленного адреса байтового буфера в адресном пространстве процесса. Этот адрес локальной памяти затем приводится к указателю или ссылке типа T.

Исходный код можно найти по адресу ;

Другие вопросы по тегам