Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1005

 
Вот и думай как это работает.
 
Seric29:
Вот и думай как это работает.
Ильяс всё достаточно понятно уже объяснял. Ищите в его сообщениях.
 
Seric29:
Вот и думай как это работает.

А вы точно всё прочли что написано в документации??? Даже это читали:

Примечание

Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит исполняющая подсистема терминала.

Общее число элементов в массиве не может превышать 2147483647.

При частом распределении памяти рекомендуется использовать третий параметр, задающий резерв для уменьшения количества физического распределения памяти. Все последующие вызовы функции ArrayResize не приводят к физическому перераспределению памяти, а только меняется размер первого измерения массива в пределах зарезервированной памяти. Следует помнить, что третий параметр будет использоваться только тогда, когда будет происходить физическое распределение памяти, например:

ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
   ArrayResize(arr,i,1000);

В данном случае произойдёт 2 перераспределения памяти, один раз до входа в цикл на 3000 итераций, при этом размерность массива будет установлена в 1000 и второй при i равной 2000. Если третий параметр опустить, то произойдёт 2000 физических перераспределения памяти и это замедлит выполнение программы.


Что в этом не понятно???

 
Alexey Viktorov:

А вы точно всё прочли что написано в документации??? Даже это читали:

Что в этом не понятно???

Так в этом то и дело что нет ни картинок не примеров, и что догадывайся как хочешь что означают эти перераспределения, и как это использовать на 100% по задумке разработчиков если не объяснено что это. Судя по этим 3ём строчкам что здесь написано я думаю что  ArrayResize(arr,1000,1000); создаёт массив на 2 тысячи элементов. Но тут не понятно. Если я например сделаю так  ArrayResize(arr,1,1000); 1000 будет висеть в холостую до тех пор пока массив разгонится до 1000.

for(int i=1;i<1001;i++)ArrayResize(массив,i,1000);

Или программа до разгона будет пользоваться этим участком просто лишь увеличивая счётчик. В общем я говорю не понятно да и всё.Или эта тысяча она просто тупо рядом лежит чтобы быстро черпать память из процессора, если это так тогда всё равно и резервную память тоже придётся переносить тогда проще работать без резерва. В общем ни кода не информации ни картинок нет как это работает не понятно.

 
У вас бывает такое, что жесткий диск на 100% загружает класс System какой-то (на 10ке)? Так же такое бывает с терминалом альпов... Обычно терминалы грузят диск при тестах, а тут прям кабзда... Не долго, 3-5 секунд, но конкретно
 
Yevhenii Levchenko:
У вас бывает такое, что жесткий диск на 100% загружает класс System какой-то (на 10ке)? Так же такое бывает с терминалом альпов... Обычно терминалы грузят диск при тестах, а тут прям кабзда... Не долго, 3-5 секунд, но конкретно

бывает, но после перезагрузки ПК

в 10-ке после загрузки ПК минут 10-15 защитник Виндовс "грызет диск" и статистика использования ПК собирается

решение - ПК в спящий режим, у меня ПК бывает по месяцу без перезагрузки, на клаве кнопку сон нажимаю вместо выключения ПК - пару раз электричество пропадало, без проблем Вин 10 загружалась если во сне ПК был

 
Seric29:

Так в этом то и дело что нет ни картинок не примеров, и что догадывайся как хочешь что означают эти перераспределения, и как это использовать на 100% по задумке разработчиков если не объяснено что это. Судя по этим 3ём строчкам что здесь написано я думаю что  ArrayResize(arr,1000,1000); создаёт массив на 2 тысячи элементов. Но тут не понятно. Если я например сделаю так  ArrayResize(arr,1,1000); 1000 будет висеть в холостую до тех пор пока массив разгонится до 1000.

Или программа до разгона будет пользоваться этим участком просто лишь увеличивая счётчик. В общем я говорю не понятно да и всё.Или эта тысяча она просто тупо рядом лежит чтобы быстро черпать память из процессора, если это так тогда всё равно и резервную память тоже придётся переносить тогда проще работать без резерва. В общем ни кода не информации ни картинок нет как это работает не понятно.

Читать надо не только три строки кода, но и текст в котором всё достаточно понятно объясняется.

Зарезервированная память и размер массива это разные понятия. Если переопределить размер массива ArrayResize(arr,1000,1000); то последний элемент массива будет 999 и никак не больше. Но если будет необходимость увеличить размер массива, то перераспределение памяти производиться не будет. Если вам не нужен такой запас размерности массива, сделайте меньше или вообще не резервируйте.

 

Добрый день!
Я хочу в функций поставить один параметр как массив. Не могу придумать как это правильно сделать. Можете поправить в примере?

void OnTick()
  {
//---
   int TestArr[]= {5,3,9,4};
   TestFArr(TestArr[]);
  }
//+------------------------------------------------------------------+

void TestFArr(int TestArr[])
  {
   int size=ArraySize(TestArr);
   Print(" --------------- size: ",size);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

Добрый день!
Я хочу в функций поставить один параметр как массив. Не могу придумать как это правильно сделать. Можете поправить в примере?

void OnTick()
  {
//---
   int TestArr[]= {5,3,9,4};
   TestFArr(TestArr);
  }
//+------------------------------------------------------------------+

void TestFArr(int &TestArr[])
  {
   int size=ArraySize(TestArr);
   Print(" --------------- size: ",size);
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Спасибо!

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