Domanda

sto implementando grandi array costanti persistenti via mmap. C'è qualche trucchi e suggerimenti o trucchi si dovrebbe essere a conoscenza quando si usa mmap?

È stato utile?

Soluzione

Tutti i puntatori che sono memorizzati all'interno della regione mmap'd dovrebbe essere fatto come offset dalla base della regione mmap'd, non come puntatori reali! Non sarà necessariamente essere sempre lo stesso indirizzo di base quando si mmap regione sulla successiva esecuzione del programma. (Ho dovuto ripulire il codice che ha fatto ipotesi non corretti per regione mmap indirizzo di base costanza).

Altri suggerimenti

Questo è il caso d'uso in avanti più dritto per mmap () quindi non ci dovrebbe essere molto più di inciampare.

Si sta effettivamente solo caricando un grande allineamento costante. Essere costanti non dovrebbe essere necessario preoccuparsi di sincronizzazione. Sarebbe opportuno assicurarsi che il prot il parametro è impostato su PROT_READ solo dal momento che non sarà scrivendo.

Se uno o più programmi che utilizzano le costanti stanno per essere continuamente funzionare, potrebbe essere utile avere un programma separato che carica i dati e la mantiene residente. Corre degli altri programmi, allora essenzialmente sono solo facendo una memoria condivisa, piuttosto che attaccano continuamente la lettura del file in memoria.

Assicurati di controllare per le restrizioni sulle dimensioni del file aperto o l'utilizzo di memoria. Su Linux v'è una costruito nel comando di shell ulimit. Esegui come ulimit -a per vedere le impostazioni correnti.

Flush scrive alla matrice in memoria per il file con il msync (2) syscall oppure si può rimanere in memoria fino a quando munmap (2) e ci può essere un calo di tensione o qualcosa del genere prima di allora!

Se più processi sono mmap'ing stessa regione di memoria condivisa con la lettura e scrittura, assicurarsi che solo uno sta scrivendo in un secondo momento per evitare di danneggiare i dati. Oppure utilizzare il blocco dei file o di altri mezzi di sincronizzazione.

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