ArrayResize не увеличивает количество элементов первого измерения динамического массива вида MyArray[][7][1440].
Ограничение на размер массива не по количеству элементов, даже нет ограничения непосредственно на один массив. Ограничение на общий объем переменных объявленных в эксперте.
Зачем вообще такие громадные массивы? Изначально неправильный алгоритмический подход. Ищите другой алгоритм.
double MyArray[100000][7][1440] = 8 * 100 000 * 7 * 1440 = 8 Gb.
Вообще такие объемы можно выделить только в MetaTrader 5 x64. Причем динамически, а не на стеке.
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.
Как быть ?
Большое спасибо всем, буду менять алгоритм. И 100000 я привел как пример - мне же в последствии нужно будет куда больше.
На лицо неправильно выбранный метод для решения задачи.
У Вас есть некая задача, Вы придумали метод по ее решению. Оказалось, что он не работает. Вы пишете на форуме, с просьбой помочь исправить метод. Вам подсказывают и помогают его исправить, тогда как изначально нужно выбрать иной метод для реализации задачи. Правильный вопрос, который не был Вами задан, заключается в следующем: "как найти решение моей задачи?", а не "почему этот метод не работает?"
Большое спасибо всем, буду менять алгоритм. И 100000 я привел как пример - мне же в последствии нужно будет куда больше.
Тогда оперативки никак не хватит. Как вариант, можно использовать Memory mapping, там можно сделать доступ, как к одномерному массиву. Ну а из одномерного пересчитать в 3-х мерный не трудно.
В ММ, на некотором уровне заполнения оперативки, винда станет выделять виртуальную память с диска. Объемы там до 64-битного адреса
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
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.
Как быть ?