Моя задача очень проста: прочитать и проанализировать большой файл на С++ в Linux. Существует два способа:
-
Разбор байта по байтам.
while(/*...*/) { ... = fgetc(...); /* do something with the char */ }
-
Буфер анализа буфера.
while(/*...*/) { char buffer[SOME_LARGE_NUMBER]; fread(buffer, SOME_LARGE_NUMBER, 1, ...); /* parse the buffer */ }
Теперь для меня проще разбирать байты по байт (не проверяйте, насколько заполнен буфер и т.д.). Однако я слышал, что чтение больших предметов более эффективно.
Какова философия? Является ли "оптимальным" буферизация задачи ядра, поэтому он уже буферизуется, когда я вызываю fgetc()
? Или он предложил мне справиться с этим, чтобы получить максимальную эффективность?
Кроме того, помимо всей философии: что такое реальность в Linux здесь?