Межпроцессные контейнеры Boost являются стандартными контейнерами с пользовательскими распределителями.
Причина: когда два процесса совместно используют память, память сопоставляется разным адресам в двух процессах. Чтобы иметь возможность использовать указатели на объекты общей памяти, нужно использовать не абсолютные адреса, а относительные смещения (которые идентичны в обоих процессах).
Таким образом, классы распределителя, относящиеся к boost::interprocess
, включают дополнительную арифметику при разыменовании. Они определяют пользовательский тип pointer
, который немного тяжелее в использовании, чем обычные указатели.
Кроме того, контейнеры точно такие же, как стандартные. Та же сложность и только небольшие накладные расходы при доступе к элементу (дополнительное дополнение). Например, различия между map
и unordered_map
будут отражены как есть при использовании специального межпроцессного распределителя.