Pregunta

Quiero usar una biblioteca que los descriptores de fichero usos como los medios básicos para acceder a sus datos. Por motivos de rendimiento, no quiero tener que comprometer archivos en el disco cada uno antes de utilizar las funciones de esta biblioteca.

Quiero crear (grandes) gotas de datos sobre la marcha, y la llamada a la biblioteca para enviarlos a un servidor. Tal como está, tengo que escribir el archivo en disco, abrirlo, pasar el FD a la biblioteca, esperar a que termine, a continuación, elimine el archivo en el disco. Desde que puedo volver a crear las manchas en la demanda (y no son tan grandes que causan el exceso de paginación de memoria virtual), guardarlos en el disco me compra nada, e incurre en una gran penalización en el rendimiento.

¿Es posible asignar un FD a un bloque de datos que reside sólo como una entidad asignado a la memoria?

¿Fue útil?

Solución

Se podría montar un memoria con respaldo de sistema de archivos http://lists.apple.com/archives/darwin-kernel/2004/Sep/msg00004.html

El uso de este mecanismo aumentará la presión de memoria en el sistema, y ??probablemente será de paginación de memoria si la presión es lo suficientemente grande. Podría ser útil para que sea una opción de configuración, en caso de que el usuario sería más bien alguna otra aplicación tiene la primera opción de la memoria.

Otra opción es el uso POSIX segmentos de memoria compartida http://opengroup.org/onlinepubs/007908799/xsh/shm_open.html (no he usado POSIX segmentos de memoria compartida a mí mismo;. si yo los entiendo bien, que fueron diseñados para resolver este problema exactamente)

La función shm_open() crea un objeto de memoria y devuelve un descriptor de archivo. A continuación, podría mmap(2) que descriptor de archivo, hacer su trabajo, y pasar el descriptor de archivo a la biblioteca.

No se olvide de shm_unlink el objeto cuando haya terminado; POSIX segmentos de memoria compartida, colas de mensajes y las matrices de semáforos no van automáticamente de distancia cuando se cierra la última del proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top