Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как создать гигантский массив в C++?

Дмитрий Котофеев Знаток (299), закрыт 2 года назад
При попытке создать массив размером на миллион крашится программа, как можно решить проблему?
Дополнен 2 года назад
вопрос решен
Лучший ответ
kaiu Высший разум (120240) 2 года назад
миллион еще не такой большой массив, но тут зависит от твоего типа данных, а то может миллион по 100 мегабайт хочешь.
И проверяй возврат, что действительно тебе выделило память.
Дмитрий КотофеевЗнаток (299) 2 года назад
миллион интов
kaiu Высший разум (120240) Дмитрий Котофеев, и не так уж много оно памяти занимает
Остальные ответы
Wolf345456 Мыслитель (7008) 2 года назад
Создать второй массив и пихать всё остальное в него
✠ Mars-Venus ✠ Профи (512) 2 года назад
Компилировать в x64, чтобы больше было ОЗУ
Дмитрий КотофеевЗнаток (299) 2 года назад
тестовый сервер на древнем компиляторе
✠ Mars-Venus ✠ Профи (512) Дмитрий Котофеев, ну тогда придумай как иначе сделать Может хранить часть в ОЗУ, часть в файле
Ксения Райт Высший разум (108326) 2 года назад
Бывают ограничения на локальные статические и вариабельные массивы. У меня на дроидах такие data-коллекции как раз где-то несколькими мегабайтами рабочей памяти и ограничены. То есть массив типа double (локальный или VLA-array) длиной в полтора миллиона уже не создать, так что всё совершенно верно - программа при этом крашится. И сделано это так специально!
Глобальных статических и любых динамических массивов это не касается, так что даже на телефоне можно работать с массивом целых чисел размером хоть сто миллионов если не больше, не говоря уж о хорошем PC. Просто пишешь, например, так:
 cout << "n: "; cin >> n; int *A = new int [n]; 
и работаешь с этим массивом как тебе надо! А когда он перестанет быть нужным, просто отказываешься от этой памяти командой delete [] A;
Альтернатива массивов - векторы. С ними тоже нет никаких ограничений на используемую память объёмами порядка нескольких мегабайт. Это очень удобная коллекция данных, от занятия памяти которой тоже можно отказаться в любой момент, освободив её для чего-нибудь другого.
А проверять память на её выделение всё же лучше, чем не проверять, а то мало ли что...
Похожие вопросы