Когда файл открывается на C ++ и мы начинаем чтение, загружается ли весь файл в оперативную память с жесткого диска или только блок за блоком? - PullRequest
1 голос
/ 04 августа 2020

Когда файл открывается в C ++ и мы начинаем чтение, загружается ли весь файл в RAM с жесткого диска или только блок за блоком?

1 Ответ

3 голосов
/ 04 августа 2020

Вы решаете, сколько читать в RAM. Когда вы выполняете "getline" или считываете сумму в буфер, вы перемещаете ее с диска в RAM. Если формат файла является «потоковым», вы можете работать с небольшими фрагментами файла за раз и при этом выполнять всю операцию. Некоторые форматы файлов, которые вам необходимо прочитать в большей части файла, чтобы выполнить операцию, которая может быть проблемой по нескольким причинам.

  1. Если файл должен быть полностью загружен перед началом обработки, вы не можете приступить к работе сразу после получения первых нескольких байтов. Это полностью последовательная операция, которая медленнее, чем одновременная обработка и загрузка.

  2. Как вы упомянули, ОЗУ меньше диска, но даже если файл может поместиться в ОЗУ, компьютеры в наши дни часто многозадачность. Если для 1 процесса требуется 4 ГБ ОЗУ, когда та же операция может быть выполнена с использованием нескольких килобайт, это может вызвать проблемы для других процессов на компьютере.

...