Я пытаюсь работать с 5-мерными массивами с большим количеством шагов. Я получаю сообщение об ошибке: '' std :: bad_alloc '' - PullRequest
0 голосов
/ 24 мая 2019

Я работаю над проблемой, для которой требуются 5-мерные массивы (динамически распределяемые) с числом шагов не менее 1000. Код прекрасно работает для 50 шагов. В то время как он выдает ошибку «terminate вызывается после создания экземпляра std :: bad_alloc» что (): std :: bad_alloc Прервано (ядро сброшено) когда количество шагов увеличивается. Есть предложения?

1 Ответ

0 голосов
/ 24 мая 2019

Я собирался написать еще один комментарий, но он стал слишком длинным ...

Вы попросили выход из std :: bad_alloc, я могу представить два варианта:

  • Купить больше оперативной памяти; -)
  • Прекратить выделять столько памяти

Учитывая, что вы не предоставили никакого кода, и неясно, что вы имеете в виду под "шагами"Я буду считать, что «шаги» - это размер каждого одномерного массива.

Теперь рассмотрим одномерный (стандартный) массив.Массив char размером 50 потребует 50 непрерывных байтов в памяти.

Для двумерного массива необходимая память будет составлять 50 ^ 50: 2500 байтов.

Для трехмерного массивамассив, требуемая память будет 50 ^ 3: 125 КБ.

При переходе к пятимерному массиву вам потребуется 50 ^ 5 (312500000) байтов, примерно 300 МБ (необязательно смежных, поскольку вы обычновыделите каждый вложенный массив с помощью вложенного for loop).

Если длина массива составляет 1000 вместо 50 , требуемая память будет равна 1000 ^ 5 (1 с15 нулей справа) байт, почти петабайт!

И вот почему у вас заканчивается память.

...