Управление многими ГБ данных на диске, прямой доступ

0

Я пытаюсь выяснить, готов ли я решить проблему, которая заинтересовала меня. Чтобы решить проблему, мне нужно будет создать двоичный файл из более чем одного TB. Если мне очень повезет, это может быть уменьшено до 300 ГБ, что будет минимальным объемом памяти, необходимой для решения моей проблемы. Очевидно, что данные не могут храниться в ОЗУ, поэтому я должен выяснить, как и когда писать на диск (и читать с).

Я думаю, что обычные способы записи на диск не могут быть и речи. fstream потерпит неудачу, когда попытается загрузить файл в память. Кто-нибудь знает о (предпочтительно переносимых) методах, которые могут читать и записывать непосредственно на диск без предварительного кэширования (частей) данных? Мне также пришло в голову, что мне может даже не понадобиться файловая система для этого. Не могу ли я просто перевернуть биты на диск напрямую (без использования emacs ' Mx butterfly)?

  • 0
    Как видно из описания , что данные должны быть записаны и считаны с помощью прямого доступа. Поэтому структура данных, лежащая в основе этих данных, должна быть тщательно спроектирована. Упаковка (или тщательное расположение) структурных полей, используя наименьшее возможное intN_t и т. Д.
  • 0
    @laune Я на самом деле планирую манипулировать отдельными битами. Каждый бит в 300 ГБ соответствует определенному состоянию, которое мне нужно проверить .
Показать ещё 2 комментария
Теги:
file
binary

1 ответ

3
Лучший ответ

Я думаю, что файл с отображением памяти (в 64-битной системе) именно то, что вам нужно.

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

Это не стандарт C++, но есть реализация Boost, которая должна работать на основных платформах.

  • 0
    Просто чтобы быть понятным, реализация Boost также будет работать для файлов, которые не помещаются в системную память? Я только что узнал, что виртуальное адресное пространство в 64-битной системе может быть 8 ТБ, так что это должно работать, верно?
  • 0
    @JorenHeit: Да, если у вас достаточно адресного пространства (что вы практически всегда делаете в 64-битной версии), файл «там» в памяти. Факт, что это фактически не загружено в память, не имеет отношения к программе; программа может притвориться, что все это есть.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню