Hace mucho que deseaba un contenedor STLish que pudiera colocar en un segmento de memoria compartida o en un archivo mapeado en memoria.¿Alguien tiene un buen contenedor de memoria compartida para C++?
He considerado el uso de un asignador personalizado y una ubicación nueva para colocar un contenedor STL regular en un segmento de memoria compartida. (como este ddj article). El problema es que los contenedores STL tendrán internamente indicadores de la memoria que poseen. Por lo tanto, si el segmento de memoria compartida o el archivo asignado de memoria se carga en una dirección base diferente (tal vez en una ejecución posterior, o en un segundo proceso), los punteros internos son repentinamente inválidos. Por lo que puedo entender, el enfoque del asignador personalizado solo funciona si siempre puede asignar el segmento de memoria a su proceso en la misma dirección. Al menos con los archivos mapeados en memoria, tengo mucha experiencia de que NO es el caso si solo dejas que el sistema lo trace donde lo desee.
He tenido algunas ideas sobre cómo hacer esto, pero me gustaría evitarlo si alguien más ya ha hecho el trabajo (ese soy yo, siendo flojo).
Actualmente estoy dejando el bloqueo de la discusión, ya que la mejor estrategia de bloqueo depende en gran medida de la aplicación.
Apoyo esta respuesta mediante la experiencia personal. ¡La guía en línea hecha usando IPC es muy fácil! 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