Domanda

Voglio usare una libreria che descrittori di file usi come i mezzi di base per accedere ai suoi dati. Per motivi di prestazioni, non voglio avere a impegnarsi file sul disco ogni prima di usare le funzioni di questa libreria.

Voglio creare (grandi) blob di dati al volo, e chiamata in biblioteca per inviarli a un server. Così com'è, devo scrivere il file su disco, aprirlo, passare il FD alla biblioteca, attendere che finisca, quindi eliminare il file su disco. Dal momento che io posso ricreare le macchie su richiesta (e non sono così grandi che causano eccessiva paginazione della memoria virtuale), salvandoli mi compra dischi nulla, e comporta una grande riduzione delle prestazioni.

E 'possibile assegnare un FD ad un blocco di dati che risiede solo come entità mappato nella memoria?

È stato utile?

Soluzione

Si potrebbe montare un Memoria-backed filesystem : http://lists.apple.com/archives/darwin-kernel/2004/Sep/msg00004.html

Utilizzando questo meccanismo aumenterà la pressione della memoria del sistema, e probabilmente sarà paging se la pressione di memoria è grande abbastanza. Potrebbe essere utile per rendere più un'opzione di configurazione, nel caso in cui l'utente sarebbe piuttosto qualche altra applicazione sono di prima scelta della memoria.

Un'altra opzione è quella di utilizzare POSIX segmenti di memoria condivisa : http://opengroup.org/onlinepubs/007908799/xsh/shm_open.html (non ho usato POSIX memoria condivisa segmenti di me stesso;. se li ho capito bene, sono stati progettati per risolvere proprio questo problema)

La funzione shm_open() crea un oggetto di memoria e restituisce un descrittore di file. Si potrebbe quindi mmap(2) che descrittore di file, fare il vostro lavoro, e passare il descrittore di file alla libreria.

Non dimenticare di shm_unlink l'oggetto quando il gioco è fatto; POSIX segmenti di memoria condivisa, code di messaggi e array semaforo non vanno automaticamente via quando le uscite dell'ultimo processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top