Платформно-независимая отображенная память [файл] ввод-вывод

Я потратил некоторое время на изучение ввода-вывода с отображением памяти для приложения, над которым я работаю . У меня есть файлы очень большого размера (в масштабе ТБ), и я хочу отображать их сегменты в памяти как для чтения, так и для записи, максимально используя кэширование на уровне ОС. Программное обеспечение, которое я пишу, должно работать под Unix / Linux и Windows ... производительность имеет решающее значение.

Я обнаружил boost :: iostreams :: mapped_file_source и boost :: iostreams :: mapped_file_sink , которые предоставляют большинство возможностей, которые я ищу. Я хотел бы, но не нашел:

  • Принудительная синхронизация записанных данных на диск ( msync (2) в Unix; FlushViewOfFile в Windows)
  • Блокировка файлов для предотвращения попыток двух процессов одновременно записать один и тот же файл (или прочитать, пока файл все еще записывается ..)
  • Управление атрибутами файла во время создания (Unix)

Может Я делаю это с помощью "boost / iostreams / device / mapped_file.hpp" ? Существуют ли другие независимые от платформы библиотеки, которые лучше подходят для моих требований? Должен ли я разработать свою собственную кроссплатформенную библиотеку, чтобы получить такую ​​гибкость?

15
задан Lightness Races with Monica 22 November 2011 в 10:19
поделиться