ArrayResize не увеличивает количество элементов первого измерения динамического массива вида MyArray[][7][1440].

 

ArrayResize не увеличивает количество элементов первого измерения динамического массива вида double MyArray[][7][1440]. Причем, если использовать ArrayResize(MyArray, 10000), то ArrayRange(MyArray, 0) покажет 10000. А если ArrayResize(MyArray, 100000), то ArrayRange(MyArray, 0) покажет 0. От 100000 я шел на уменьшение, но прошел недолго, например при 35000 он тоже не изменяет кол-во элементов первого измерения. Указано ограничение на количество элементов массива - 2147483647. Это имеется ввиду по одному из измерений или общее число элементов по всем измерениям ? Даже если по всем, то при MyArray[100000][7][1440] общее число что-то вроде 1000000000, что почти в 2 раза меньше 2147483647.

Как быть ? 

 

Ограничение на размер массива не по количеству элементов, даже нет ограничения непосредственно на один массив. Ограничение на общий объем переменных объявленных в эксперте.

Зачем вообще такие громадные массивы? Изначально неправильный алгоритмический подход. Ищите другой алгоритм.

 

double MyArray[100000][7][1440] = 8 * 100 000 * 7 * 1440 = 8 Gb.

Вообще такие объемы можно выделить только в MetaTrader 5 x64. Причем динамически, а не на стеке.

 
ArkFatalist:

ArrayResize не увеличивает количество элементов первого измерения динамического массива вида double MyArray[][7][1440]. Причем, если использовать ArrayResize(MyArray, 10000), то ArrayRange(MyArray, 0) покажет 10000. А если ArrayResize(MyArray, 100000), то ArrayRange(MyArray, 0) покажет 0. От 100000 я шел на уменьшение, но прошел недолго, например при 35000 он тоже не изменяет кол-во элементов первого измерения. Указано ограничение на количество элементов массива - 2147483647. Это имеется ввиду по одному из измерений или общее число элементов по всем измерениям ? Даже если по всем, то при MyArray[100000][7][1440] общее число что-то вроде 1000000000, что почти в 2 раза меньше 2147483647.

Как быть ? 

Используйте массив структур
 
Для начала попробуйте заменить double на float и посмотрите, какой размер станет доступным.
 
Большое спасибо всем, буду менять алгоритм. И 100000 я привел как пример - мне же в последствии нужно будет куда больше.
 
ArkFatalist:
Большое спасибо всем, буду менять алгоритм. И 100000 я привел как пример - мне же в последствии нужно будет куда больше.

На лицо неправильно выбранный метод для решения задачи.

У Вас есть некая задача, Вы придумали метод по ее решению. Оказалось, что он не работает. Вы пишете на форуме, с просьбой помочь исправить метод. Вам подсказывают и помогают его исправить, тогда как изначально нужно выбрать иной метод для реализации задачи. Правильный вопрос, который не был Вами задан, заключается в следующем: "как найти решение моей задачи?", а не "почему этот метод не работает?"

 
ArkFatalist:
Большое спасибо всем, буду менять алгоритм. И 100000 я привел как пример - мне же в последствии нужно будет куда больше.

Тогда оперативки никак не хватит. Как вариант, можно использовать Memory mapping, там можно сделать доступ, как к одномерному массиву. Ну а из одномерного пересчитать в 3-х мерный не трудно.

В ММ, на некотором уровне заполнения оперативки, винда станет выделять виртуальную память с диска. Объемы там до 64-битного адреса

Причина обращения: