Быстрое чтение файлов - PullRequest
4 голосов
/ 10 января 2012

Если я прав, в Linux (в C/C++, gcc/g++) можно читать данные из обычного файла, используя системные вызовы read(2) или mmap(2).

Два вопроса. Используете ли read системный вызов mmap внутри страны? Когда первый быстрее второго и наоборот?

Ответы [ 2 ]

6 голосов
/ 10 января 2012

Если вы читаете файл последовательно, мой выбор по умолчанию будет многократно read в большой буфер.

Если вы обращаетесь к небольшим битам данных, разбросанных по большому файлу, выбор менее очевиден, но mmap может привести к более читаемому коду (поскольку вы можете кодировать вещи, как если бы файл уже был в памяти) , Что даст лучшую производительность в этом случае, сложно сказать априори.

Если вы пишете код, критичный к производительности, то единственный способ определить производительность - это сравнить / профилировать реальный код.

3 голосов
/ 10 января 2012

Общее правило:

  • если вы читаете файл последовательно от начала до конца, вы можете использовать read () без снижения производительности.

  • , если вы читаете файл с произвольным доступом, mmap () приведет к лучшей производительности, чем сравнительная комбинация seek () / read ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...