EMZETT.
Войти

mmap: отображение файлов в память

Коротко: С помощью mmap операционная система отображает файл в адресное пространство программы, так что его можно читать и записывать как массив в памяти.

Подробнее: Программа больше не вызывает read. При первом обращении к странице страничная ошибка запускает подгрузку с диска.

Подробности

  • Вызов: mmap(NULL, длина, PROT_READ, MAP_SHARED, fd, 0) возвращает указатель. В Python: mmap.mmap(...).
  • Преимущества: Нет копирования между памятью ядра и программы, удобный произвольный доступ, несколько процессов делят одни и те же страницы (разделяемая память).
  • Анонимный mmap: Без файла, так распределители памяти (malloc для больших блоков) запрашивают память.
  • Ловушки: Обращение к усечённому файлу вызывает сигналы (SIGBUS). При множестве малых файлов или последовательном чтении обычное чтение часто не медленнее.
  • Применение: Базы данных (LMDB, прежде MongoDB), исполняемые файлы и библиотеки сами загружаются через mmap, большие файлы моделей в ИИ.
  • Страничный кэш: Данные лежат в страничном кэше ядра и вытесняются при нехватке памяти.

См. также: Copy-on-write