У меня давно появилось желание контейнера STLish, который я мог бы разместить в сегменте разделяемой памяти или в карте памяти.У кого-нибудь есть хороший контейнер общей памяти для C++?
Я рассмотрел использование специального распределителя и нового места размещения для размещения обычного контейнера STL в сегменте общей памяти. (например, ddj article). Проблема в том, что контейнеры STL будут внутренне иметь указатели на принадлежащую им память. Поэтому, если сегмент разделяемой памяти или файл с отображением памяти загружается с другим базовым адресом (возможно, при последующем запуске или во втором процессе), то внутренние указатели внезапно становятся недействительными. Насколько я могу судить, подход пользовательского распределителя работает только в том случае, если вы всегда можете сопоставить сегмент памяти в своем процессе по тому же адресу. По крайней мере, с файлами с отображением памяти, у меня есть большой опыт того, что НЕ происходит, если вы просто позволяете системе отображать ее там, где бы она ни находилась.
У меня были некоторые мысли о том, как это сделать, но я бы хотел избежать этого, если кто-то еще выполнил эту работу (это я, ленивый).
В настоящее время я оставляю блокировку из обсуждения, так как лучшая стратегия блокировки зависит от приложения.
Я поддерживаю этот ответ, используя личный опыт. Онлайн-руководство, сделанное с помощью IPC, ветерок! www.boost.org/doc/libs/1_36_0/doc/html/interprocess/quick_guide.html www.boost.org/doc/libs/1_36_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file – pestophagous 2008-11-06 16:38:17