Vorrei (in * nix) allocare uno spazio di indirizzi ampio, contiguo, ma senza consumare risorse immediatamente, cioè voglio riservare un intervallo di indirizzi a cui assegnarlo successivamente.Come posso riservare gli indirizzi di memoria senza assegnarli
Supponiamo che io faccia foo = malloc (3 * 1024 * 1024 * 1024) per allocare 3G, ma su un computer 1G con 1G di file di scambio. Fallirà, giusto?
Quello che voglio fare è dire "Datemi un intervallo di indirizzi di memoria pippo pippo ... + 3G in cui io sarò l'allocazione" in modo da poter garantire tutte le allocazioni all'interno di questa zona sono contigui, ma senza in realtà l'assegnazione immediamente.
Nell'esempio sopra, voglio seguire la chiamata foo = reserve_memory (3G) con una chiamata bar = malloc (123) che dovrebbe essere accettata poiché reserve_memory non ha ancora consumato risorse, garantisce solo che la barra non essere nella gamma foo ... foo + 3G.
Successivamente vorrei fare qualcosa come allocate_for_real (foo, 0,234) per consumare byte 0..234 dell'intervallo di foo. A questo punto, il kernel alloca alcune pagine virtuali e le mappa a foo ... foo + 123 + N
E 'possibile in userspace?
(Il punto di questo è che gli oggetti in foo ... necessariamente contigue e non possono ragionevolmente essere spostati dopo la loro creazione.)
Grazie.
Spero che tu sia su una piattaforma a 64 bit, o un'assegnazione di blocchi 3G difficilmente riuscirà. – MarkR
virtualmente o fisicamente contigui? – shodanex