LINUX.ORG.RU

История изменений

Исправление witaway, (текущая версия) :

Placement new ведь просто создаст объект в указанной памяти.

Однако, если внутри контейнера будет выделяться ещё память, указатели будут уже указывать на нерасшаренные её сегменты, вроде?

Причём в стандарте нет гарантий о внутреннем представлении контейнера std::array в памяти. Вроде даже если будет работать, то лишь как частный случай.

По идее, во все STL-контейнеры можно передавать кастомные аллокаторы. Можно написать такой, чтобы выделял память в shmem. Но я не уверен, будут ли даже эти указатели актуальны в другом процессе…

Можно ещё сделать свою структуру данных, оптимизированную под расшаривание.

Можно ещё посмотреть, как работает Boost::Interprocess. У них есть свои какие-то готовые решения поднятой в топике проблемы.

Исходная версия witaway, :

Placement new ведь просто создаст объект в указанной памяти.

Однако, если внутри контейнера будет выделяться ещё память, указатели будут уже указывать на нерасшаренные её сегменты.

А в стандарте нет гарантий о внутреннем представлении контейнера std::array в памяти. Вроде даже если будет работать, то лишь как частный случай.

По идее, во все STL-контейнеры можно передавать кастомные аллокаторы. Но я не уверен, даст ли это нужные гарантии и бедут ли эти указатели актуальны в другом процессе…

Можно ещё сделать свою структуру данных, оптимизированную под расшаривание.

Можно ещё посмотреть, как работает Boost::Interprocess. У них есть свои какие-то готовые решения поднятой в топике проблемы.