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

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

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

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

29.11.2013, 12:02. Просмотров 2906. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes (C++):

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

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

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

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

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

Двумерный массив <array>. const int value = array.size(); value не константа? - C++
#include &lt;array&gt; #include &lt;iostream&gt; using std::array; using std::cout; /*ФУНКЦИЯ ЗАПОЛНЕНИЯ МАССИВА ЗНАЧЕНИЯМИ*/ template...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
29.11.2013, 13:01 #6
Пардон, оговорился (имел ввиду 32-разрядный адрес).
Для 64 разрядного кода надо использовать 64 разрядный компилятор.
В VS для этого надо создать соответствующий проект.
0
newbie666
Заблокирован
29.11.2013, 13:11  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
В VS для этого надо создать соответствующий проект.
)))) какой ещё проект ? смотрите на скрине - конфигурация 64-х битная стоит.
Проекты там все одного типа
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.11.2013, 13:46 #10
Цитата Сообщение от newbie666 Посмотреть сообщение
С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
Посчитали сколько памяти нужно на такой массив?
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,448
Записей в блоге: 3
Завершенные тесты: 1
29.11.2013, 13:47 #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
конечно:
Цитата Сообщение от newbie666 Посмотреть сообщение
не надо спрашивать, сколько у меня оперативной памяти - достаточно.
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
29.11.2013, 13:53 #12
Цитата Сообщение от Croessmah Посмотреть сообщение
Посчитали сколько памяти нужно на такой массив?
ну 80 гигов то есть примерно?
к тому же ошибка
Цитата Сообщение от newbie666 Посмотреть сообщение
error C2148: total size of array must not exceed 0x7fffffff bytes
не из той серии когда не хватает памяти
0
alsav22
5420 / 4816 / 442
Регистрация: 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     Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes
  #15

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 14:02
Привет! Вот еще темы с ответами:

Invalid allocation size 4294967295 bytes - C++
Здравствуйте! Пытаюсь реализовать алгоритм обхода Грэхема. При запуске приложения появляется критическая ошибка: Invalid allocation size...

Ошибка - invalid allocation size: 4294967292 bytes - C++
Выполняю лабораторную работу №6 в методичке (прикрепил ее в посте), там программа - Многопроцессная обработка данных. Саму программу можно...

Allowed memory size of 67108864 bytes exhausted - PHP
Здравствуйте! move_uploaded_file($_FILES, $uploadfile); //------------------------------------------ list($width, $height) =...

Как обойти ограничение на длину элемента строкового массива? - Visual Basic
Подскажите, пожалуйста, как можно обойти ограничение на длину элементов строкового массива, чтобы в него можно было записать строку длиной...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.11.2013, 14:02
Ответ Создать тему
Опции темы

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