ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
692917 Топик полностью
Николай Коровин (14.08.2016 20:18 - 20:32, просмотров: 110) ответил Ксения на У меня в компьютере 2 Гб памяти, а нужен массив размером 3.5 Гб - как быть?
Помнится, будучи школоло, на КВасике делал своп на рамдрайв %) Тупо в файле свой хлам хранил, а файл клал на рамдрайв во втором мегабайте (из двух всего). Граница 64 была успешно преодолена %) А если серьёзно... Ой ли так прямо нужен прямой доступ в случайном порядке? Оптимизировать никак? Потому что я такое барахло храню или прямо в файле, положившись на системное кэширование (fstream в моём любимом ваткоме кэшируется достаточно хорошо для того, чтобы ползанье туда-сюда примерно на одном месте не вызывало фактических операций чтения), то есть получается "своп наоборот"; или же корчу из себя Кармака и делаю собственную кэшмашину со страничками и предугадыванием (тоже интересный момент -- мне ли не знать заранее лучше, чем системе, какие данные понадобятся следующими?) В данном случае -- ну, могу посоветовать зааллокатить сколько выйдет и создать массив длиной N, содержащий пары "последовательность -- сколько раз встречается". Каждая новая последовательность или инкрементирует соответствующую ячейку, если она там уже есть (алгоритмы быстрого поиска описывать или и так понятно?), или создаёт новую ячейку (если есть место в массиве). Если место кончилось -- пробегаемся по всему массиву и растыкиваем результаты в файл. Поскольку распределение ну явно не равномерное, прога будет работать достаточно быстро, не слишком часто высовываясь из, скажем, 512 mb массива. Я вообще часто перелопачиваю гигабайты и даже десятки гигабайт вполне спокойно. Пока необходимости что-то гигантское под это аллокатить тьфу-тьфу не возникало, небольшой мухлёж с последовательностью и порядком -- и всё отличненько насквозь с винта на винт пролетает %)