Какое значение имеет длина карты памяти при использовании mmap API? - PullRequest
0 голосов
/ 21 декабря 2018

В POSIX у вас есть этот прекрасный mmap() API.В документации не ясно, влияет ли значение length на память / производительность.Пожалуйста, посоветуйте!

void *mmap(void *addr, size_t length, int prot, int flags,
           int fd, off_t offset);

Рассмотрим файл размером 10 МБ, в котором мне нужно отобразить только его часть, например 2 МБ.Также предположим, что мы никогда не пытаемся получить доступ к памяти за пределами 2 МБ.(Это, очевидно, оказывает влияние.)


Q: Имеет ли значение, если length установлено в 2 или 10 МБ?

1 Ответ

0 голосов
/ 21 декабря 2018

Параметр length указывает, сколько непрерывного пространства, начиная с offset, должно быть отображено в память.Отображение только первых 2M файла с длиной 10M не должно иметь неблагоприятных характеристик производительности по сравнению с отображением 10M, за исключением случаев, когда необходимо изменить отображение позже , чтобы прочитать другие части.

Одна из причин для параметра длины - избегать доступа к частям, к которым вы не хотите обращаться даже случайно.Другая причина в том, что если у вас есть файл 6G и 32-разрядный процессор, то удачи вам в попытке отобразить все эти 6G в пространство пользователя 2-4G.

...