Чтение больших буферов в C — эффективные методы

Я программирую на языке C. Иногда нам приходится читать большие данные из файлов, для которых мы обычно используем системные вызовы fread или read, что означает либо потоковый ввод-вывод, либо ввод-вывод системного вызова.

Я хочу спросить, если мы читаем такие большие данные, а затем вычисляем размер блока и читаем в соответствии с этим, поможет ли это нам как-то эффективно читать его или нет?

Я знаю, что чтение через системные вызовы может сделать его медленным, и есть другие условия, например, если нам приходится иметь дело с сетевыми сокетами, тогда мы должны использовать их, вместо использования потокового ввода-вывода, это даст нам оптимизированные результаты. Точно так же мне нужны некоторые советы и приемы для чтения больших данных из файлов и вещей, о которых нужно позаботиться.

Кроме того, если mmap может быть более выгодным, чем эти обычные операции ввода-вывода, уточните, пожалуйста, в каких ситуациях это может быть?

Платформа: Linux, компилятор gcc


person john    schedule 10.05.2012    source источник
comment
Вы консультировались с этот вопрос, этот вопрос и этот вопрос?   -  person moooeeeep    schedule 10.05.2012


Ответы (2)


Я думаю, что всегда полезно читать блоками. Для огромных файлов мы, очевидно, не хотели бы выделять огромное количество памяти в куче. Если файл имеет размер порядка нескольких МБ, то я думаю, что мы можем сразу прочитать весь файл в буфере char и использовать этот буфер для обработки ваших данных. Это было бы быстрее, чем чтение снова и снова из файла.

person Manik Sidana    schedule 10.05.2012

Рассматривали ли вы отображение памяти файла с помощью mmap?

person Oliver Charlesworth    schedule 10.05.2012