2011-06-06 6 views
7

Cuando creo un segmento de memoria compartida en Windows (como CreateFileMapping(INVALID_HANDLE_VALUE, ...)), ¿hay alguna forma de redimensionarlo, aparte de crear un segmento más grande y copiar los datos?Windows: cambiar el tamaño de la memoria compartida

He leído en MSDN que las asignaciones de archivos tienen un tamaño fijo, pero ¿hay alguna manera de hacer una nueva asignación en la misma memoria? Como en Linux, donde puede usar shm_open() y luego ftruncate() y mmap() de nuevo.

Respuesta

6

La respuesta corta es no, no se puede cambiar el tamaño de una asignación de archivos una vez que se haya creado. La secuencia de creación/copia que describes es la única forma que conozco para lograr esto con las asignaciones de archivos respaldadas por el archivo de paginación del sistema.

Dicho esto, puede gestionar el archivo que respalda su mapeo usted mismo y lograr esto. Comience con su propio archivo de datos de inicialización cero y especifique los manejadores válidos en sus llamadas al CreateFileMapping().

Cuando necesite redimensionar, cierre sus asignaciones, amplíe el archivo y vuelva a crear sus asignaciones. Esto requeriría alguna sincronización entre operaciones de crecimiento/truncado, no trivial, pero tampoco debería ser demasiado difícil.

Al final, es la misma vieja historia. Mayor complejidad en comparación con el rendimiento.

Cuestiones relacionadas