me gustaría (en * nix) para asignar un espacio de direcciones grande, contigious, pero sin consumir recursos de inmediato, es decir, quiero reservar un rango de direcciones de una asignación de él más tarde.¿Cómo puedo reservar direcciones de memoria y sin asignarlos
Supongamos que hago foo = malloc (3 * 1024 * 1024 * 1024) para asignar 3G, pero en una computadora 1G con 1G de archivo de intercambio. Fallará, ¿verdad?
Lo que quiero hacer es decir "Dame un rango de direcciones de memoria foo foo ... + 3G en el que voy a ser la asignación de" por lo que puedo garantizar todas las asignaciones dentro de esta área son contiguas, pero sin llegar a la asignación inmediatamente.
En el ejemplo anterior, deseo seguir la llamada foo = reserve_memory (3G) con una llamada bar = malloc (123) que debe tener éxito ya que reserve_memory aún no ha consumido recursos, simplemente garantiza que la barra no estar en el rango foo ... foo + 3G.
Más tarde me gustaría hacer algo como allocate_for_real (foo, 0234) para consumir bytes 0..234 del rango de foo. En este punto, el núcleo asignaría algunas páginas virtuales y asignarlos a foo foo ... + 123 + N
Es esto posible en el espacio de usuario?
(El punto de esto es que los objetos en foo ... necesidad de ser contiguas y no pueden razonablemente ser movidos después de su creación.)
Gracias.
Espero que esté en una plataforma de 64 bits, o que una asignación de bloques 3G no sea probable que tenga éxito. – MarkR
virtual o contiguo físicamente? – shodanex