ho un buffer di grandi dimensioni:ottenere il comportamento di copia su scrittura della forcella() ing, senza forcella()
char *buf = malloc(1000000000); // 1GB
Se biforcato un nuovo processo, avrebbe un BUF cui la memoria condivisa con il genitore del genitore fino a quando uno o l'altro gli ha scritto. Anche allora, solo un nuovo blocco 4KiB dovrebbe essere assegnato dal kernel, il resto continuerà ad essere condiviso.
Mi piacerebbe fare una copia di buf, ma ho intenzione di cambiare solo un po 'della copia. Mi piacerebbe il comportamento copy-on-write senza biforcazione. (Come si ottiene gratuitamente quando si biforca.)
È possibile?
sicuro, ma non sarà "gratuito": dovrai gestire la tua memoria e tenere traccia delle modifiche. –
Sì, voglio "gratuitamente". Mi stavo chiedendo se ci fossero delle soluzioni basate su mmap, o forse qualcosa che non avevo nemmeno immaginato. – fadedbee
Forse mmap con MAP_ANONYMOUS e MAP_PRIVATE farebbe il lavoro? – fadedbee