Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
newbie666
Заблокирован
#1

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

29.11.2013, 12:02. Просмотров 2648. Ответов 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 миллиардов интов ...
Есть идеи?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 12:02     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes
Посмотрите здесь:

C++ total size of local objects too large
В чём разница между total = total + trans и total += trans? C++
Expected constant expression; cannot allocate an array of constant size 0 C++
Размер массива(error C2057: требуется константное выражение) C++
C++ Создайте класс Array с двумя полями: указатель на массив целых чисел и размер массива
C++ Функции (find out the array in which total number of positive elements is bigger)
C++ Какой максимальный размер строки можно зашифровать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6189 / 5792 / 1875
Регистрация: 18.12.2011
Сообщений: 14,797
Завершенные тесты: 1
29.11.2013, 12:13     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #2
Создайте двумерный массив,
а под каждую строку выделите не более 0x7fffffff .
C++
1
2
3
unsigned **test = new unsigned*[200]
for(int i=0;i<200;i++)
     test[i]=new unsigned[0x7fffffff];
newbie666
Заблокирован
29.11.2013, 12:22  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #3
Цитата Сообщение от zss Посмотреть сообщение
Создайте двумерный массив,
не ну это то понятно, можно и два отдельных массива создать, но хотелось бы иметь один выровненный в памяти массив, и чтоб потом читать из него по правилам memory coalescing

С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
zss
Модератор
Эксперт С++
6189 / 5792 / 1875
Регистрация: 18.12.2011
Сообщений: 14,797
Завершенные тесты: 1
29.11.2013, 12:40     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #4
Из программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
newbie666
Заблокирован
29.11.2013, 12:47  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #5
Цитата Сообщение от zss Посмотреть сообщение
з программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
это ещё почему? вот это 0x7fffffff - это 32-х разрядное число, в 64- битных платформах адреса выглядят так - см картинку (то есть в два раза больше)
Миниатюры
Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes  
zss
Модератор
Эксперт С++
6189 / 5792 / 1875
Регистрация: 18.12.2011
Сообщений: 14,797
Завершенные тесты: 1
29.11.2013, 13:01     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #6
Пардон, оговорился (имел ввиду 32-разрядный адрес).
Для 64 разрядного кода надо использовать 64 разрядный компилятор.
В VS для этого надо создать соответствующий проект.
newbie666
Заблокирован
29.11.2013, 13:11  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #7
Цитата Сообщение от zss Посмотреть сообщение
В VS для этого надо создать соответствующий проект.
)))) какой ещё проект ? смотрите на скрине - конфигурация 64-х битная стоит.
Проекты там все одного типа
zss
Модератор
Эксперт С++
6189 / 5792 / 1875
Регистрация: 18.12.2011
Сообщений: 14,797
Завершенные тесты: 1
29.11.2013, 13:26     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #8
То, что у Вашего компьютера 64 разрядная платформа не означает,
что создается 64 разрядное приложение
(Хотя, я в VS2012 не работал. Может она автоматически решает, что
результат должен быть 64-разрядным).
newbie666
Заблокирован
29.11.2013, 13:45  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #9
Цитата Сообщение от zss Посмотреть сообщение
Хотя, я в VS2012 не работал. Может она автоматически решает, что
результат должен быть 64-разрядным
в студии ты как бы создаёшь 64-х битную конфигуруцию - и можешь быть уверен, что больше для этого ничего не надо, т.к. исходя из скрина ваше - адреса у меня 64-х битные (могу ещё регистры RAX привести, если не веришь)
Тут вопрос в другом, почему даже в 64-х битной платформе стоит ограничение на максимальный размер массива в 32-а бита? Гуру, кто подкинет идейку ......
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 13:46     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #10
Цитата Сообщение от newbie666 Посмотреть сообщение
С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
Посчитали сколько памяти нужно на такой массив?
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,710
Записей в блоге: 2
Завершенные тесты: 1
29.11.2013, 13:47     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
конечно:
Цитата Сообщение от newbie666 Посмотреть сообщение
не надо спрашивать, сколько у меня оперативной памяти - достаточно.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
29.11.2013, 13:53     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #12
Цитата Сообщение от Croessmah Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
ну 80 гигов то есть примерно?
к тому же ошибка
Цитата Сообщение от newbie666 Посмотреть сообщение
error C2148: total size of array must not exceed 0x7fffffff bytes
не из той серии когда не хватает памяти
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 13:58     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #13
C++
1
2
unsigned long long n = 10000000000;
unsigned int *test = new unsigned int[n];
newbie666
Заблокирован
29.11.2013, 13:58  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #14
Цитата Сообщение от Raali Посмотреть сообщение
не из той серии когда не хватает памяти
да причём тут память? Эта ошибка при компиляции вылетает ))0 Не в рантайме же
На 1 миллиард примерно 4 гига надо, на 10 - 40 гигов в данном случае да не суть
На моей текущей дохлой машинке - всего 16 гигов, но я даже не могу компильнуть прогу, проблема то именно в этом
Может надо как то другие библиотеку VC подрубать
Ryuk
29.11.2013, 14:02
  #15

Не по теме:

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

newbie666
Заблокирован
29.11.2013, 14:08  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #16
Цитата Сообщение от Ryuk Посмотреть сообщение
newbie666, супер-игру создаешь?
систему искусственного разума с управляемыми ей подмодулями распознавания/ синтеза речи, компьютерного зрения и тд и тп
Kuzia domovenok
1887 / 1742 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
29.11.2013, 14:11     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #17
Компилируешь в режиме x86 или х64? Имхо, пока не запустил в рантайме, все равно, сколько у тебя оперативки!
И да, лучше оптимизируй свой тупой алгоритм. Какую бы задачу он ни решал, очень мало оправданий требовать себе столько памяти!
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 14:13     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #18
newbie666, что молчишь? Если как в 13 посте сделать, компилируется?
newbie666
Заблокирован
29.11.2013, 14:26  [ТС]     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #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-х битовый ))) Тоесть компилятор вручную заданное число приводил к инту и охреневал, что я очень большое число влепил)))))

СПАСИБО ЧТО ВПРАВИЛИ МНЕ МОЗГ )))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2014, 00:53     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes
Еще ссылки по теме:

Invalid allocation size 4294967295 bytes C++
C++ Максимальный размер массива
C++ Ошибка - invalid allocation size: 4294967292 bytes
C++ Можно ли обойти динамический массив не зная его размер?
C++ Двумерный массив <array>. const int value = array.size(); value не константа?

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

Или воспользуйтесь поиском по форуму:
togemura
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 9
16.04.2014, 00:53     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes #20
Цитата Сообщение от newbie666 Посмотреть сообщение
систему искусственного разума с управляемыми ей подмодулями распознавания/ синтеза речи, компьютерного зрения и тд и тп
это была моя идея...


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

Добавлено через 6 минут
*P.S. даже если ставлю число с которым память выделяется нормально, но при этом после этого создаю еще такой же массив, то то же исключение
//размер ОЗУ позволяет
Yandex
Объявления
16.04.2014, 00:53     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes
Ответ Создать тему
Опции темы

Текущее время: 07:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru