Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
newbie666
Заблокирован
1

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

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

Ну собственно 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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 приложения - клиент и сервер. Клиент отправляет текст...

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

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

28
zss
Модератор
Эксперт С++
7462 / 6838 / 4317
Регистрация: 18.12.2011
Сообщений: 18,090
Завершенные тесты: 1
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
newbie666
Заблокирован
29.11.2013, 12:22  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Создайте двумерный массив,
не ну это то понятно, можно и два отдельных массива создать, но хотелось бы иметь один выровненный в памяти массив, и чтоб потом читать из него по правилам memory coalescing

С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
0
zss
Модератор
Эксперт С++
7462 / 6838 / 4317
Регистрация: 18.12.2011
Сообщений: 18,090
Завершенные тесты: 1
29.11.2013, 12:40 4
Из программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
0
newbie666
Заблокирован
29.11.2013, 12:47  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
з программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
это ещё почему? вот это 0x7fffffff - это 32-х разрядное число, в 64- битных платформах адреса выглядят так - см картинку (то есть в два раза больше)
0
Миниатюры
Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes  
zss
Модератор
Эксперт С++
7462 / 6838 / 4317
Регистрация: 18.12.2011
Сообщений: 18,090
Завершенные тесты: 1
29.11.2013, 13:01 6
Пардон, оговорился (имел ввиду 32-разрядный адрес).
Для 64 разрядного кода надо использовать 64 разрядный компилятор.
В VS для этого надо создать соответствующий проект.
0
newbie666
Заблокирован
29.11.2013, 13:11  [ТС] 7
Цитата Сообщение от zss Посмотреть сообщение
В VS для этого надо создать соответствующий проект.
)))) какой ещё проект ? смотрите на скрине - конфигурация 64-х битная стоит.
Проекты там все одного типа
0
zss
Модератор
Эксперт С++
7462 / 6838 / 4317
Регистрация: 18.12.2011
Сообщений: 18,090
Завершенные тесты: 1
29.11.2013, 13:26 8
То, что у Вашего компьютера 64 разрядная платформа не означает,
что создается 64 разрядное приложение
(Хотя, я в VS2012 не работал. Может она автоматически решает, что
результат должен быть 64-разрядным).
0
newbie666
Заблокирован
29.11.2013, 13:45  [ТС] 9
Цитата Сообщение от zss Посмотреть сообщение
Хотя, я в VS2012 не работал. Может она автоматически решает, что
результат должен быть 64-разрядным
в студии ты как бы создаёшь 64-х битную конфигуруцию - и можешь быть уверен, что больше для этого ничего не надо, т.к. исходя из скрина ваше - адреса у меня 64-х битные (могу ещё регистры RAX привести, если не веришь)
Тут вопрос в другом, почему даже в 64-х битной платформе стоит ограничение на максимальный размер массива в 32-а бита? Гуру, кто подкинет идейку ......
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 13:46 10
Цитата Сообщение от newbie666 Посмотреть сообщение
С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
Посчитали сколько памяти нужно на такой массив?
0
Croessmah
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
29.11.2013, 13:47 11
Цитата Сообщение от alsav22 Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
конечно:
Цитата Сообщение от newbie666 Посмотреть сообщение
не надо спрашивать, сколько у меня оперативной памяти - достаточно.
0
Raali
647 / 350 / 75
Регистрация: 06.07.2013
Сообщений: 1,123
Завершенные тесты: 1
29.11.2013, 13:53 12
Цитата Сообщение от Croessmah Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
ну 80 гигов то есть примерно?
к тому же ошибка
Цитата Сообщение от newbie666 Посмотреть сообщение
error C2148: total size of array must not exceed 0x7fffffff bytes
не из той серии когда не хватает памяти
0
alsav22
5444 / 4839 / 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
newbie666
Заблокирован
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
newbie666
Заблокирован
29.11.2013, 14:08  [ТС] 16
Цитата Сообщение от Ryuk Посмотреть сообщение
newbie666, супер-игру создаешь?
систему искусственного разума с управляемыми ей подмодулями распознавания/ синтеза речи, компьютерного зрения и тд и тп
0
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
29.11.2013, 14:11 17
Компилируешь в режиме x86 или х64? Имхо, пока не запустил в рантайме, все равно, сколько у тебя оперативки!
И да, лучше оптимизируй свой тупой алгоритм. Какую бы задачу он ни решал, очень мало оправданий требовать себе столько памяти!
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 14:13 18
newbie666, что молчишь? Если как в 13 посте сделать, компилируется?
1
newbie666
Заблокирован
29.11.2013, 14:26  [ТС] 19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Компилируешь в режиме x86 или х64?
да посмотри пост ёлки палки Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes

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

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

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

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

СПАСИБО ЧТО ВПРАВИЛИ МНЕ МОЗГ )))
1
togemura
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2014, 00:53

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

Двумерный массив <array>. const int value = array.size(); value не константа?
#include &lt;array&gt; #include &lt;iostream&gt; using std::array; using std::cout; ...

Invalid allocation size 4294967295 bytes
Здравствуйте! Пытаюсь реализовать алгоритм обхода Грэхема. При запуске...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru