2011-08-16 15 views
7

Estoy tratando de usar un segmento parecido a mmap para asignar objetos en contenedores stl, para eso estoy usando boost :: interprocess que proporciona asignaciones de memoria, asignadores y memoria anónima soporte de mapeo
Un poco como thisboost :: interprocess memory allocator on anonymous segment

Mi problema es que la función de anonymous_shared_memoryhere vuelve algo que se ve la mitad de archivos y la memoria asignada medio compartido (tiene sentido con mmap :)) y aunque los dos estilos trabajan con interprocess allocators éste se parece a su falta un segment_manager que hace la asignación del fragmento real.
Como devuelve un alto nivel mapped_region ya mapeado en el proceso pero sin administrador y de ninguna manera que puedo ver para enganchar en segment_manager.

+0

Si 'anonymous_shared_memory' no se ajusta al protocolo que los asignadores esperan entreprocesamiento, parece un error. Te recomiendo que intentes informarlo. –

Respuesta

3

A mapped_region es un objeto de nivel bajo a medio, y literalmente representa solo la memoria. Managed shared memory, sin embargo

es una clase avanzada que combina un objeto de memoria compartida y una región asignada que cubre todo el objeto de memoria compartida,

por lo que es la memoria administrada que poseen la segment_manager.

Teniendo en cuenta que desea utilizar anonymous_shared_memory, primero se obtendría el memory_region como en el ejemplo, entonces se usaría la colocación new poner un segment_manager en de ella. Su constructor toma el tamaño del segmento de memoria en el que se está construyendo. No sé si esto incluye el tamaño del administrador, aunque sospecho que está incluido.

+0

@Arkaitz, ¿has probado esto? ¿Te gustaría que prepare un código para ello? – rcollyer

+0

por favor hazlo; ¡Seria útil! –

+0

@ EiyrioüvonKauyf ha pasado un tiempo muy largo desde que miré esto, así que si no publico el código este fin de semana, pónganme otra vez. – rcollyer