Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1005

 
Así es como funciona.
 
Seric29:
Así es como funciona.
Ilyas ya lo ha explicado con bastante claridad. Búscalo en sus posts.
 
Seric29:
Así es como funciona.

¿Estás seguro de que has leído todo lo que hay en la documentación? Incluso has leído esto:

Nota

La función sólo puede aplicarse a matrices dinámicas. Hay que tener en cuenta que las matrices dinámicas asignadas como búferes indicadores por la función SetIndexBuffer() no pueden cambiar de tamaño. Todas las operaciones relacionadas con el cambio de tamaño de las memorias intermedias de los indicadores son realizadas por el subsistema ejecutivo del terminal.

El número total de elementos de un array no puede superar los 2147483647.

Si la memoria se asigna con frecuencia, se recomienda utilizar el tercer parámetro que especifica la reserva para reducir la cantidad de memoria física asignada. Todas las llamadas posteriores a la función ArrayResize no darán lugar a una reasignación de memoria física, sólo a un cambio de tamaño de la primera dimensión del array dentro de la memoria reservada. Tenga en cuenta que el tercer parámetro sólo se utilizará cuando la asignación de memoria física esté en curso, por ejemplo:

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

En este caso habrá 2 reasignaciones de memoria, una antes de entrar en el bucle para 3000 iteraciones, con la dimensión del array fijada en 1000 y la segunda en i igual a 2000. Si se omite el tercer parámetro, habrá 2.000 reasignaciones de memoria física y esto ralentizará la ejecución del programa.


¿Qué es lo que no está claro?

 
Alexey Viktorov:

¿Estás seguro de que has leído todo lo que hay en la documentación? Incluso leer esto:

¿Qué es lo que no está claro en esto?

Bueno, ese es el punto que no hay imágenes ni ejemplos, y puedes adivinar lo que significan estas redistribuciones, y cómo usarlo 100% de acuerdo a la idea de los desarrolladores si no se explica. A juzgar por estas 3 líneas que están escritas aquí, creo que ArrayResize(arr,1000,1000); crea un array de 2 mil elementos. Pero aquí no está claro. Si hago ArrayResize(arr,1,1000); por ejemplo, 1000 se quedará colgado hasta que el array llegue a 1000.

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

O el programa utilizará este fragmento antes del overclocking, simplemente incrementando el contador. O este 1000 es solo para obtener rápidamente la memoria de la CPU, si es así entonces la memoria de respaldo también tendrá que ser transferida, entonces es más fácil trabajar sin respaldo. En general, no hay código, ni información, ni imágenes, ni idea de cómo funciona.

 
¿Alguna vez se ha dado esta situación en la que el disco duro está cargado al 100% por una clase de Sistema de algún tipo (en 10ka)? También ocurre con el terminal de los alpes... Normalmente los terminales cargan el disco durante las pruebas, pero aquí es sólo kabda... No es largo, de 3 a 5 segundos, pero es concreto
 
Yevhenii Levchenko:
¿Alguna vez te ha pasado que tu disco duro arranca al 100% con la clase de sistema de algún tipo (en el 10)? También ocurre con el terminal de los alpes... Normalmente los terminales cargan el disco durante las pruebas, pero aquí es sólo kabbda... No es largo, de 3 a 5 segundos, pero es concreto

sucede, pero después de reiniciar el PC

a los 10-15 minutos de reiniciar el PC, Windows Defender "mastica el disco" y se recogen las estadísticas de uso del PC

solución - suspender el PC, mi PC puede estar un mes sin reiniciar, presiono el botón de reposo en el teclado en lugar de apagar el PC - un par de veces se fue la luz, no hay problema con Win10 arrancando si el PC estaba en reposo

 
Seric29:

Esa es la cuestión, no hay imágenes ni ejemplos, y se puede adivinar lo que significan estas redistribuciones, y cómo usarlo al 100% según la idea de los desarrolladores si no se explica. A juzgar por estas 3 líneas que están escritas aquí, creo que ArrayResize(arr,1000,1000); crea un array de 2 mil elementos. Pero aquí no está claro. Si hago ArrayResize(arr,1,1000); por ejemplo, 1000 se quedará colgado hasta que el array llegue a 1000.

O el programa utilizará este fragmento antes del overclocking, simplemente incrementando el contador. O este 1000 es solo para obtener rápidamente la memoria de la CPU, si es así entonces la memoria de respaldo también tendrá que ser transferida, entonces es más fácil trabajar sin respaldo. En general, no hay código, ni información, ni fotos, ni idea de cómo funciona.

Debes leer no sólo las tres líneas de código, sino también el texto que lo explica todo con bastante claridad.

La memoria reservada y el tamaño de la matriz son nociones diferentes. Si anulas el tamaño del array con ArrayResize(arr,1000,1000); el último elemento del array será 999 y no más. Pero si necesitas aumentar el tamaño del array, no habrá reasignación de memoria. Si no necesitas tal reserva de tamaño de matriz, hazla más pequeña o no la reserves.

 

¡Buenas tardes!
Quiero poner un parámetro como un array en una función. No sé cómo hacerlo bien. ¿Puede corregir el ejemplo?

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

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

¡Buenas tardes!
Quiero poner un parámetro como un array en una función. No sé cómo hacerlo bien. ¿Puede corregir el ejemplo?

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

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

Gracias.

Razón de la queja: