2012-04-11 6 views
0

Мне нужно сохранить большой трехмерный массив целых чисел в файл и загрузить его снова на C++. Это 256 * 256 * 256 = 16777216 целых чисел.Сохранение и загрузка большого массива в C++

Каков наилучший способ сохранить это и загрузить его снова? Меня больше всего интересует быстрое время загрузки.

+0

У вас должна быть возможность загрузить файл из нескольких потоков (так как любое количество читателей в порядке). Хранение их в одном массиве должно выполняться тщательно (чтобы не мешать друг другу). Я попытался бы сохранить данные таким образом, чтобы сделать несколько потоков выполнимыми (т. Е. Формат разрыва строки). – twain249

+1

@ twain249 Я бы сказал, что узким местом является диск, добавляющий время поиска, перемещая его вперед и назад в файле, не улучшит его намного ... Просто скажите ... – littleadv

+0

Возможно, посмотрите вопрос [Как сжать буфер с zlib] (http://stackoverflow.com/q/4538586/1084416) –

ответ

8

Если массив выделен в непрерывной памяти (т. Е .: вы не выделяете каждый размер отдельно) - вы можете просто сбросить весь блок памяти в файл. Требуется столько, сколько потребуется, но это будет наименьшее издержки (то есть: вызов двоичной записи на весь фрагмент данных).

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

+0

Спасибо! Я попытаюсь реализовать это. Есть ли какие-либо ссылки в Интернете, которые могли бы мне помочь? – hansdam

1

Вы можете быть заинтересованы в Boost.Serialization, особенно если вы (1) хотите способность к легко хранить такие данные на диске, (2) хотите когерентный способ сохранить более сложные объекты, и (3) требуется решение это портативный.