2012-05-10 5 views
1

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

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

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

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

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

+0

Вы консультировались с [этот вопрос] (http://stackoverflow.com/q/258091/1025391), [этот вопрос] (http://stackoverflow.com/q/10380745/1025391) и [этот вопрос ] (http://stackoverflow.com/q/8056984/1025391)? – moooeeeep

ответ

2

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

Смежные вопросы