Если вам нужно выделить виртуально непрерывной памяти, то вы можете использовать vmalloc()
для этого (подробнее здесь ). Однако фактическая физическая память может быть разбросана, поэтому, если вы планируете использовать этот буфер с некоторым аппаратным блоком (например, DMA, шина PCI) вне вашего MMU ЦП, тогда vmalloc()
может оказаться не лучшим выбором.
Вы, вероятно, должны использовать kmalloc()
для большинства целей (больше информации здесь ). Разница в том, что vmalloc()
всегда будет изменять таблицы страниц, чтобы получить новую память (немного похоже на mmap()
в пользовательском пространстве). Другое отличие состоит в том, что kmalloc()
дает вам физически непрерывную память и обычно быстрее, чем vmalloc()
, который всегда должен изменять таблицы страниц.
Очень хорошим источником информации о памяти Linux является Драйверы устройств Linux 3 (в частности, глава 15 в вашем случае), вы, вероятно, найдете ответ на большинство ваших вопросов внутри.