Я бы хотел (в * nix) выделить большое, неконтролируемое адресное пространство, но без немедленного использования ресурсов, т. Е. Я хочу зарезервировать диапазон адресов, чтобы выделить его позже.
Предположим, я делаюfoo = malloc (3 *1024* 1024 * 1024) для выделения 3G, но на компьютере 1G с 1G файла подкачки.Это не удастся, верно?
Что я хочу сделать, это сказать: «Дайте мне диапазон адресов памяти foo ... foo + 3G , в который я буду распределять », чтобы я мог гарантироватьвсе распределения в этой области являются смежными, но без непосредственного распределения.
В приведенном выше примере я хочу следовать вызову foo = reserve_memory (3G) с вызовом bar = malloc (123), который должен завершиться успешнотак как reserve_memory еще не потребляет никаких ресурсов, он просто гарантирует, что бар не будет находиться в диапазоне foo ... foo + 3G.
Позже я бы сделал что-то вроде allocate_for_real (foo, 0,234) для потребления байтов0..234 диапазона фу.В этот момент ядро выделит некоторые виртуальные страницы и отобразит их в foo ... foo + 123 + N
Возможно ли это в пользовательском пространстве?
(Смысл в том, что объектыв foo ... должны быть смежными и не могут быть разумно перемещены после того, как они созданы.)
Спасибо.