mmap () vs read ()

Я пишу редактор массовых тегов ID3 ​​на C. Теги ID3 обычно находятся в начале файла, закодированного в формате mp3, хотя более старые теги (версия 1) находятся в конце. Приложение предназначено для приема списка идентификаторов каталогов и фреймов из командной строки, а затем повторного выполнения структуры каталогов, обновляя все найденные теги ID3. Пользователь может дополнительно удалить все старые теги (версия 1). Другой вариант - просто отобразить текущие теги без выполнения обновления. Каталог может содержать 2 файла или 2 миллиона. Если пользователь хочет обновить файлы, я планировал загрузить весь файл в память, выполнить обновления, а затем сохранить его (файл также можно переименовать). Однако, если пользователь хочет распечатать только текущие теги ID3, загрузка всего файла кажется чрезмерной. Ведь файл может быть 200мб.

Я прочитал эту ветку, что было проницательно - mmap () против блоков чтения

Итак, мой вопрос, какой наиболее эффективный способ сделать это - read (), mmap () или какая-то комбинация? Идеи дизайна приветствуются.

Edit: Насколько я понимаю, mmap по существу делегирует загрузку файла в память подсистеме виртуальной памяти. Мне кажется, что VMM будет сильно оптимизирован для большинства систем, так как он критичен для производительности системы.

12
задан JL2210 6 July 2019 в 23:57
поделиться