Заблокирован
|
||||||
1 | ||||||
Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes29.11.2013, 12:02. Показов 10187. Ответов 28
Метки нет (Все метки)
Ну собственно Visual Studio 2012, платформа x64, при попытке создать массив из 10-и миллиардов элементов
error C2148: total size of array must not exceed 0x7fffffff bytes не надо спрашивать, сколько у меня оперативной памяти - достаточно. Дело в другом, я скоро буду собирать машинку под кое - что с 512-ю гигабайтами оперативки и мне хотелось бы выделять кусок выровненной памяти под 100 миллиардов интов ... Есть идеи?
0
|
29.11.2013, 12:02 | |
Ответы с готовыми решениями:
28
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) Как обойти ограничение на размер передаваемых пакетов в сети? Как обойти ограничение на максимальный обьем памяти материнской платы? |
Модератор
13505 / 10756 / 6411
Регистрация: 18.12.2011
Сообщений: 28,711
|
||||||
29.11.2013, 12:13 | 2 | |||||
Создайте двумерный массив,
а под каждую строку выделите не более 0x7fffffff .
0
|
Заблокирован
|
|
29.11.2013, 12:22 [ТС] | 3 |
не ну это то понятно, можно и два отдельных массива создать, но хотелось бы иметь один выровненный в памяти массив, и чтоб потом читать из него по правилам memory coalescing
С чем вообще связанно это ограничение? Неужели нет каких то вариантов массивов с бОльшим числом элементов?
0
|
Модератор
13505 / 10756 / 6411
Регистрация: 18.12.2011
Сообщений: 28,711
|
|
29.11.2013, 12:40 | 4 |
Из программы Вы используете 64 разрядный указатель.
Соответственно, максимальный адрес будет равен тому самому 0x7fffffff.
0
|
Модератор
13505 / 10756 / 6411
Регистрация: 18.12.2011
Сообщений: 28,711
|
|
29.11.2013, 13:01 | 6 |
Пардон, оговорился (имел ввиду 32-разрядный адрес).
Для 64 разрядного кода надо использовать 64 разрядный компилятор. В VS для этого надо создать соответствующий проект.
0
|
Модератор
13505 / 10756 / 6411
Регистрация: 18.12.2011
Сообщений: 28,711
|
|
29.11.2013, 13:26 | 8 |
То, что у Вашего компьютера 64 разрядная платформа не означает,
что создается 64 разрядное приложение (Хотя, я в VS2012 не работал. Может она автоматически решает, что результат должен быть 64-разрядным).
0
|
Заблокирован
|
|
29.11.2013, 13:45 [ТС] | 9 |
в студии ты как бы создаёшь 64-х битную конфигуруцию - и можешь быть уверен, что больше для этого ничего не надо, т.к. исходя из скрина ваше - адреса у меня 64-х битные (могу ещё регистры RAX привести, если не веришь)
Тут вопрос в другом, почему даже в 64-х битной платформе стоит ограничение на максимальный размер массива в 32-а бита? Гуру, кто подкинет идейку ......
0
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
29.11.2013, 13:53 | 12 |
ну 80 гигов то есть примерно?
к тому же ошибка не из той серии когда не хватает памяти
0
|
Заблокирован
|
|
29.11.2013, 13:58 [ТС] | 14 |
да причём тут память? Эта ошибка при компиляции вылетает ))0 Не в рантайме же
На 1 миллиард примерно 4 гига надо, на 10 - 40 гигов в данном случае да не суть На моей текущей дохлой машинке - всего 16 гигов, но я даже не могу компильнуть прогу, проблема то именно в этом Может надо как то другие библиотеку VC подрубать
0
|
Ryuk
|
29.11.2013, 14:02
#15
|
Не по теме: newbie666, супер-игру создаешь? :D
0
|
29.11.2013, 14:11 | 17 |
Компилируешь в режиме x86 или х64? Имхо, пока не запустил в рантайме, все равно, сколько у тебя оперативки!
И да, лучше оптимизируй свой тупой алгоритм. Какую бы задачу он ни решал, очень мало оправданий требовать себе столько памяти!
0
|
Заблокирован
|
|
29.11.2013, 14:26 [ТС] | 19 |
да посмотри пост ёлки палки Можно ли обойти ограничение на максимальный размер массива ? error C2148: total size of array must not exceed 0x7fffffff bytes
ААААААААА вот я баран :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 |
это была моя идея...
компилируется, но exception bad allocation.... как быть? Добавлено через 6 минут *P.S. даже если ставлю число с которым память выделяется нормально, но при этом после этого создаю еще такой же массив, то то же исключение //размер ОЗУ позволяет
0
|
16.04.2014, 00:53 | |
16.04.2014, 00:53 | |
Помогаю со студенческими работами здесь
20
Как можно обойти ограничение API VK? Можно ли обойти ограничение объема используемой памяти? Какой максимальный размер двумерного массива можно создать? Можно ли обойти ограничение PDO на использование вложенных транзакций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |