У меня давно возникла потребность в контейнере STLish, который я мог бы поместить в сегмент совместно используемой памяти или файл отображения памяти.
Я рассмотрел использование пользовательского распределителя и размещения нового для размещения обычного контейнера STL в сегменте общей памяти. (как этот ddj статья ). Проблема в том, что контейнеры STL будут внутренне иметь указатели на память, которой они владеют. Следовательно, если сегмент общей памяти или файл с отображенной памятью загружаются по другому базовому адресу (возможно, при последующем запуске или во втором процессе), то внутренние указатели внезапно становятся недействительными. Насколько я могу понять, подход с пользовательским распределителем работает только в том случае, если вы всегда можете отобразить сегмент памяти в свой процесс по тому же адресу. По крайней мере, с файлами, отображаемыми в память, у меня есть большой опыт того, что этого не случится, если вы просто позволите системе отобразить его там, где он когда-либо ощущается.
У меня были некоторые мысли о том, как это сделать, но я бы хотел избежать этого, если кто-то уже сделал работу (это я, ленивый).
В настоящее время я исключаю блокировку из обсуждения, поскольку лучшая стратегия блокировки сильно зависит от приложения.