Ich möchte (in * nix) einen großen, festen Adressraum zuweisen, aber ohne Ressourcen sofort zu verbrauchen, d. H. Ich möchte einen Adressbereich reservieren und ihn später zuweisen.Wie kann ich Speicheradressen reservieren, ohne sie zuzuweisen
Angenommen, ich foo = malloc (3 * 1024 * 1024 * 1024) zu 3G zuweisen, aber auf einem 1G Computer mit 1G Swap-Datei. Es wird scheitern, oder?
Was ich tun möchte, ist zu sagen: „Gib mir einen Speicheradressbereich foo ... foo + 3G , in die ich Zuteilung sein wird“, so kann ich garantieren, dass alle Zuweisungen in diesem Bereich sind zusammenhängende, aber ohne tatsächlich die Zuteilung sofort.
Im obigen Beispiel möchte ich dem Aufruf foo = reserve_memory (3G) mit einem Aufruf bar = malloc (123) folgen, der erfolgreich war, da reserve_memory noch keine Ressourcen verbraucht hat sei im Bereich foo ... foo + 3G.
Später würde ich etwas wie allocate_for_real (foo, 0,234) tun, um Bytes 0..234 von foo's Bereich zu verbrauchen. Zu diesem Zeitpunkt würde der Kernel einige virtuelle Seiten zuweisen und sie foo ... foo + 123 + N
zuordnen. Ist das im Userspace möglich?
(Der Punkt ist, dass Objekte in foo ... müssen zusammenhängend sein und vernünftigerweise nicht bewegt werden kann, nachdem sie erstellt werden.)
Danke.
Ich hoffe, Sie sind auf einer 64-Bit-Plattform, oder eine 3G-Block-Zuweisung wird wahrscheinlich nicht gelingen. – MarkR
virtuell oder physisch zusammenhängend? – shodanex