Чтение / запись большого файла случайным образом - mmap при каждом чтении / записи? - PullRequest
1 голос
/ 28 июня 2019

Допустим, у меня есть большой файл, 1Go.Я хочу READ 10ko со смещением 10, затем WRITE 645ko со смещением 235689, затем READ 150Mo со смещением 648975 и так далее ...

Каков наилучший подход между этими двумя:

  • Открытие файла и отображение его (какой размер?).Затем делайте чтение / запись.В конце распакуйте и закройте его.
  • Или открыв файл.При чтении / записи выполняется отображение файла (какой размер?), А затем его отображение.В конце закройте файл.

1 Ответ

2 голосов
/ 01 июля 2019

Выполнение mmap (1) на каждом вводе / выводе не похоже на правильную вещь - это может привести к путанице в читателе кода и, возможно, к оптимизации ядра, и не даст никаких преимуществ.

Вы можете использовать pread (1) / pwrite (1) или preadv (1) / pwritev (1), если вы хотите быть откровенным о ваших операциях чтения и записи.

Если нет, вы можете отобразить (1) весь файл (нообязательно используйте правильные флаги, вероятно MAP_SHARED) - Linux все равно не будет пытаться загрузить весь файл в память.

...