shm_open()
mmap()
con predefiniti grandilength
fork()
(più volte)ftruncate()
a volontà
Il punto di questo è quello di fare in modo che ogni processo generato da fork()
hanno un segmento condiviso allo stesso indirizzo. Tuttavia, non voglio mantenere la RAM sempre occupata, ma ridimensionarla dinamicamente (con dimensioni che spaziano da 0 a grande length
).è sicuro eseguire il fobraggio di un oggetto di memoria condivisa dopo averlo cancellato?
Può funzionare? C'è UB?
Questo è quello che supponevo, ma l'attivatore 'munmap' può scrivere su pagine sporche che potrebbero attivare un' SIGBUS'? –
Contrassegnare questo come accettato, perché risponde alla mia domanda. Ma il metodo di Damon è meglio gestibile (posso scaricare le pagine nel mezzo dell'intervallo 'mmap'ed). –
@nneonneo Non penso che sia giusto. Credo che sia necessario eseguire un 'mremap' dopo il' ftruncate' per aggiornare la mappatura. Ciononostante, dovresti comunque allocare una grande dimensione in origine per evitare che 'mremap' fallisca con 'ENOMEM'. – jleahy