Я пытаюсь понять что-то немного лучше о mmap. Недавно я прочитал эту часть этого принятого ответа на соответствующий StackOverflow вопрос (цит ниже): mmap and memory usageКак mmap() помогает считывать информацию с определенным смещением по сравнению с обычным Posix I/O
Допустим, вы читаете 100MB порцию данных, и в соответствии с первоначальным 1Мб данных заголовка, информации, вы хотите находится на смещении 75MB, так что вам не нужно ничего между 1 ~ 74.9MB! Вы прочитали это для ничего, кроме как сделать ваш код проще. С mmap вы будете только читать данные, к которым вы действительно обращались (округленный 4kb, или OS-страница размер, который в основном 4kb), поэтому он будет читать только первый и 75-й MB.
Я понимаю большую часть преимуществ mmap (нет необходимости в контекстных переключателях, нет необходимости менять содержимое и т. Д.), Но я не совсем понимаю это смещение. Если мы не mmap, и нам нужна информация на 75-м MB-смещении, не можем ли мы сделать это со стандартными вызовами ввода-вывода файлов POSIX без использования mmap? Почему MMAP точно помогает здесь?
'mmap()' имеет тенденцию быть переоцененным решением. Прочитайте [этот пост] (http://marc.info/?l=linux-kernel&m=95496636207616&w=2) сам Линус Торвальдс, который был в ответ на то, что кто-то жалуется, что 'mmap()' доступ к данным занял в три раза больше как просто используя 'read()'. –