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

Про массивы. - C++

Восстановить пароль Регистрация
 
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
16.12.2011, 13:22     Про массивы. #1
Пытался анализировать вместимость стандартных массивов в С++. в том числе и 2мерных. оказывается есть значительные ограничения. И при чем как то вот встретил такую вот странность.
Когда объявляю например:
C++
1
unsigned long int Mass[10000000]; //т.е. 1*10 в 7й степени.
или
C++
1
short             Mass2[100000000]; //а тут может влезть 1*10 в 8й степени
А там где long - 8я степень критична. Короче говоря, предполагаю что все это объясняется с точки зрения с++, но вопрос вот в чем, если мне нужна массив 1*10 в 9й степени мне как быть?
и 2мерные массивы. они существенно короче. А мне для вполне конкретной задачи просто не хватает
длинны. Например :
C++
1
short  Mass2[40000][40000];
- такой массив не хочет создаваться. Как быть?

Добавлено через 1 час 18 минут
Соотв. 4х мерный массив может быть таким:
short Mass2[100][100][100][100]; - добавление доп нолика ведет к ошибке.

Добавлено через 11 минут
Проверил динамические массивы. Получается ровно такая же фигня. т.е. массив можно создать сколь угодно большим но работать прекращает на тех же интервалах что и массивы стековые.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 13:22     Про массивы.
Посмотрите здесь:

C++ Задачка про массивы
C++ Про массивы
Пара вопросов про массивы C++
C++ задaчки про массивы
про двумерные массивы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
16.12.2011, 13:34     Про массивы. #2
Присоединяюсь к вопросу,у меня
C++
1
double M[100000]
уже не работает
serejkus
46 / 44 / 4
Регистрация: 31.10.2011
Сообщений: 98
16.12.2011, 13:35     Про массивы. #3
Языки C/C++ имеют ограничения на максимальный размер массива - обычно это максимальное значение size_t (где можно точно посмотреть, сейчас не вспомню, но можно ориентироваться на ULONG_MAX из limits.h). Это ограничение платформо-зависимое, так что смотрите соответствующие константы на своей машине.
N-мерные массивы - суть одномерные, но с индексацией по N индексов, т.е. массив a[N1][N2] есть одномерный массив размером N1 * N2. Когда вы говорите a[v1][v2], то компилятор делает так: a[v1 * v2 + v2].
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
16.12.2011, 17:29  [ТС]     Про массивы. #4
ну очевидно что есть ограничение. Вопрос, как это обойти?!

Добавлено через 3 часа 17 минут
видимо это был риторический вопрос. Уважаемые эксперты, ну хоть подтвердите, что изменить уже ничего нельзя.
serejkus
46 / 44 / 4
Регистрация: 31.10.2011
Сообщений: 98
16.12.2011, 19:01     Про массивы. #5
Цитата Сообщение от Андрей2011 Посмотреть сообщение
ну очевидно что есть ограничение. Вопрос, как это обойти?!

Добавлено через 3 часа 17 минут
видимо это был риторический вопрос. Уважаемые эксперты, ну хоть подтвердите, что изменить уже ничего нельзя.
Я не знаю способа "обойти" это ограничение, насколько я помню, это особенность языка.
Могу предложить примитивное решение в лоб: создаёте класс контейнер, который адресуется числами типа double (надо не забывать про точность этих чисел). В этом классе динамически выделять массивы по мере необходимости, получать элементы по схеме, описанной выше.
К примеру, создали сразу массив размера ULONG_MAX, понадобилось еще - создаёте ещё один массив (либо опять размера ULONG_MAX, либо меньше - смотрите сами. Ну и так далее.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
17.12.2011, 20:43     Про массивы. #6
Я где-то читал, что так как переменные создаються в стэковой памяти, то ограничения идут именно оттуда. А вообще можно создавать массив в динамической памяти там размер ограничен только твоей оперативной памятью.

C++
1
 int *arr = new int [10000000]
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
17.12.2011, 20:54     Про массивы. #7
Записывайте в файл, или создавайте динамический масив.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 23:31     Про массивы.
Еще ссылки по теме:

задача про массивы C++
Программа про динамические массивы C++
Ошибка в задаче про массивы C++

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

Или воспользуйтесь поиском по форуму:
serejkus
46 / 44 / 4
Регистрация: 31.10.2011
Сообщений: 98
17.12.2011, 23:31     Про массивы. #8
Цитата Сообщение от soican Посмотреть сообщение
Я где-то читал, что так как переменные создаються в стэковой памяти, то ограничения идут именно оттуда. А вообще можно создавать массив в динамической памяти там размер ограничен только твоей оперативной памятью.

C++
1
 int *arr = new int [10000000]
Думается мне, что ограничение связано не с тем, где выделяется память, а с тем, как она адресуется. Еще раз: обычно максимальный размер массива равен максимальному беззнаковому целому. Не очень ясно как вы будете получать значение из ячейки памяти за номером ULONG_MAX + N (ну и не менее непонятно, как выделить память такого размера в heap'е).
Yandex
Объявления
17.12.2011, 23:31     Про массивы.
Ответ Создать тему
Опции темы

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