Платформо-независимая память, отображённая [file] IO - PullRequest
15 голосов
/ 21 ноября 2011

Я потратил некоторое время на исследование ввода-вывода с отображением памяти для приложения, над которым я работаю.У меня есть несколько очень больших (в масштабе ТБ) файлов, и я хочу отобразить сегменты из них в память для чтения и записи, максимально используя кэширование на уровне ОС.Программное обеспечение, которое я пишу, должно работать под 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"?Существуют ли другие независимые от платформы библиотеки, которые лучше соответствуют моим требованиям?Должен ли я разработать свою собственную кроссплатформенную библиотеку, чтобы получить такую ​​гибкость?

1 Ответ

3 голосов
/ 22 ноября 2011

Посмотрите на boost :: interprocess и boost :: interprocess :: file_mapping. У них есть все необходимое.

повышение :: межпроцессного

повышение :: межпроцессного :: file_mapping

...