Заблокирован
1

Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes

29.11.2013, 12:02. Показов 10173. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ну собственно Visual Studio 2012, платформа x64, при попытке создать массив из 10-и миллиардов элементов
C++
1
unsigned *test = new unsigned[10000000000];
получаю резонный error:
error C2148: total size of array must not exceed 0x7fffffff bytes
не надо спрашивать, сколько у меня оперативной памяти - достаточно. Дело в другом, я скоро буду собирать машинку под кое - что с 512-ю гигабайтами оперативки и мне хотелось бы выделять кусок выровненной памяти под 100 миллиардов интов ...
Есть идеи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2013, 12:02
Ответы с готовыми решениями:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1572864 bytes)
Доброго времени суток уважаемые участники форума. Не так давно взялся за тех. поддержку сайта...

Allowed memory size of 134217728 bytes exhausted (tried to allocate 46704001 bytes)
Вот такая проблема возникает при загрузке изображения, проблему устранил, но таким путём, которые...

Как обойти ограничение на размер передаваемых пакетов в сети?
Собственно есть 2 приложения - клиент и сервер. Клиент отправляет текст произвольный длины на...

Как обойти ограничение на максимальный обьем памяти материнской платы?
Есть материнская плата s3200sh intel. Cейчас установлено 4 модуля памяти по 2гб ddr2....

28
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
29.11.2013, 12:13 2
Создайте двумерный массив,
а под каждую строку выделите не более 0x7fffffff .
C++
1
2
3
unsigned **test = new unsigned*[200]
for(int i=0;i<200;i++)
     test[i]=new unsigned[0x7fffffff];
0
Заблокирован
29.11.2013, 12:22  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Создайте двумерный массив,
не ну это то понятно, можно и два отдельных массива создать, но хотелось бы иметь один выровненный в памяти массив, и чтоб потом читать из него по правилам memory coalescing

С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
29.11.2013, 12:40 4
Из программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
0
Заблокирован
29.11.2013, 12:47  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
з программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
это ещё почему? вот это 0x7fffffff - это 32-х разрядное число, в 64- битных платформах адреса выглядят так - см картинку (то есть в два раза больше)
Миниатюры
Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes  
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
29.11.2013, 13:01 6
Пардон, оговорился (имел ввиду 32-разрядный адрес).
Для 64 разрядного кода надо использовать 64 разрядный компилятор.
В VS для этого надо создать соответствующий проект.
0
Заблокирован
29.11.2013, 13:11  [ТС] 7
Цитата Сообщение от zss Посмотреть сообщение
В VS для этого надо создать соответствующий проект.
)))) какой ещё проект ? смотрите на скрине - конфигурация 64-х битная стоит.
Проекты там все одного типа
0
Модератор
Эксперт С++
13498 / 10752 / 6407
Регистрация: 18.12.2011
Сообщений: 28,692
29.11.2013, 13:26 8
То, что у Вашего компьютера 64 разрядная платформа не означает,
что создается 64 разрядное приложение
(Хотя, я в VS2012 не работал. Может она автоматически решает, что
результат должен быть 64-разрядным).
0
Заблокирован
29.11.2013, 13:45  [ТС] 9
Цитата Сообщение от zss Посмотреть сообщение
Хотя, я в VS2012 не работал. Может она автоматически решает, что
результат должен быть 64-разрядным
в студии ты как бы создаёшь 64-х битную конфигуруцию - и можешь быть уверен, что больше для этого ничего не надо, т.к. исходя из скрина ваше - адреса у меня 64-х битные (могу ещё регистры RAX привести, если не веришь)
Тут вопрос в другом, почему даже в 64-х битной платформе стоит ограничение на максимальный размер массива в 32-а бита? Гуру, кто подкинет идейку ......
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 13:46 10
Цитата Сообщение от newbie666 Посмотреть сообщение
С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
Посчитали сколько памяти нужно на такой массив?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
29.11.2013, 13:47 11
Цитата Сообщение от alsav22 Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
конечно:
Цитата Сообщение от newbie666 Посмотреть сообщение
не надо спрашивать, сколько у меня оперативной памяти - достаточно.
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
29.11.2013, 13:53 12
Цитата Сообщение от Croessmah Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
ну 80 гигов то есть примерно?
к тому же ошибка
Цитата Сообщение от newbie666 Посмотреть сообщение
error C2148: total size of array must not exceed 0x7fffffff bytes
не из той серии когда не хватает памяти
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 13:58 13
C++
1
2
unsigned long long n = 10000000000;
unsigned int *test = new unsigned int[n];
2
Заблокирован
29.11.2013, 13:58  [ТС] 14
Цитата Сообщение от Raali Посмотреть сообщение
не из той серии когда не хватает памяти
да причём тут память? Эта ошибка при компиляции вылетает ))0 Не в рантайме же
На 1 миллиард примерно 4 гига надо, на 10 - 40 гигов в данном случае да не суть
На моей текущей дохлой машинке - всего 16 гигов, но я даже не могу компильнуть прогу, проблема то именно в этом
Может надо как то другие библиотеку VC подрубать
0
Ryuk
29.11.2013, 14:02
  #15

Не по теме:

newbie666, супер-игру создаешь? :D

0
Заблокирован
29.11.2013, 14:08  [ТС] 16
Цитата Сообщение от Ryuk Посмотреть сообщение
newbie666, супер-игру создаешь?
систему искусственного разума с управляемыми ей подмодулями распознавания/ синтеза речи, компьютерного зрения и тд и тп
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
29.11.2013, 14:11 17
Компилируешь в режиме x86 или х64? Имхо, пока не запустил в рантайме, все равно, сколько у тебя оперативки!
И да, лучше оптимизируй свой тупой алгоритм. Какую бы задачу он ни решал, очень мало оправданий требовать себе столько памяти!
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 14:13 18
newbie666, что молчишь? Если как в 13 посте сделать, компилируется?
1
Заблокирован
29.11.2013, 14:26  [ТС] 19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Компилируешь в режиме x86 или х64?
да посмотри пост ёлки палки Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes

Цитата Сообщение от alsav22 Посмотреть сообщение
newbie666, что молчишь? Если как в 13 посте сделать, компилируется?
ААААААААА вот я баран :r ofl:

конечно компилируется :-)))))))))))
спасибо!!!

unsigned long long n = 10000000000;
unsigned int *test = new unsigned int[n]

если тут вручную вбить вместо n число - тогда не компильнётся, я совсем забыл, что любое целое число по умолчанию приводится к инту )))))))) а она современных ОС - он 32-х битовый ))) Тоесть компилятор вручную заданное число приводил к инту и охреневал, что я очень большое число влепил)))))

СПАСИБО ЧТО ВПРАВИЛИ МНЕ МОЗГ )))
1
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 9
16.04.2014, 00:53 20
Цитата Сообщение от newbie666 Посмотреть сообщение
систему искусственного разума с управляемыми ей подмодулями распознавания/ синтеза речи, компьютерного зрения и тд и тп
это была моя идея...


Цитата Сообщение от newbie666 Посмотреть сообщение
unsigned long long n = 10000000000;
unsigned int *test = new unsigned int[n]
компилируется, но exception bad allocation.... как быть?

Добавлено через 6 минут
*P.S. даже если ставлю число с которым память выделяется нормально, но при этом после этого создаю еще такой же массив, то то же исключение
//размер ОЗУ позволяет
0
16.04.2014, 00:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2014, 00:53
Помогаю со студенческими работами здесь

Как можно обойти ограничение API VK?
Здравствуйте! Пишу автоответчик сообщении на ВК, но есть ограничения на ВК (метод - messenge.send)...

Можно ли обойти ограничение объема используемой памяти?
Мне нужно создавать большое количество массивов и порой их так много, что для объявления их всех не...

Какой максимальный размер двумерного массива можно создать?
Ребят возник вопрос. Самый большой тип знаковый- это __int64. Там максимальный элемент равен:9 223...

Можно ли обойти ограничение PDO на использование вложенных транзакций
Уже спрашивал в базах данных, но похоже разделом ошибся. Спрошу здесь. Есть ли в Yii какой-нибудь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru