Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1005

 
Voici comment cela fonctionne.
 
Seric29:
Voici comment cela fonctionne.
Ilyas l'a déjà expliqué très clairement. Cherchez-le dans ses messages.
 
Seric29:
Voici comment cela fonctionne.

Êtes-vous sûr d'avoir tout lu dans la documentation ? Tu as même lu ça :

Note

Cette fonction ne peut être appliquée qu'aux tableaux dynamiques. Vous devez garder à l'esprit que les tableaux dynamiques affectés comme tampons d'indicateurs par la fonction SetIndexBuffer() ne peuvent pas être redimensionnés. Toutes les opérations liées au redimensionnement des tampons d'indicateurs sont effectuées par le sous-système exécutif du terminal.

Le nombre total d'éléments d'un tableau ne peut pas dépasser 2147483647.

Si la mémoire est fréquemment allouée, il est recommandé d'utiliser le troisième paramètre spécifiant la réserve pour réduire la quantité d'allocation de mémoire physique. Tous les appels ultérieurs à la fonction ArrayResize n'entraîneront pas de réaffectation de la mémoire physique, mais seulement un redimensionnement de la première dimension du tableau dans la mémoire réservée. N'oubliez pas que le troisième paramètre ne sera utilisé que lorsque l'allocation de la mémoire physique est en cours, par exemple :

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

Dans ce cas, il y aura 2 allocations de mémoire, une fois avant d'entrer dans la boucle pour 3000 itérations, avec la dimension du tableau fixée à 1000 et la seconde à i égal à 2000. Si le troisième paramètre est omis, il y aura 2 000 réallocations de mémoire physique, ce qui ralentira l'exécution du programme.


Qu'est-ce qui n'est pas clair ?

 
Alexey Viktorov:

Êtes-vous sûr d'avoir tout lu dans la documentation ? Même lire ceci :

Qu'est-ce qui n'est pas clair ?

Eh bien, c'est le point qu'il n'y a pas d'images ou d'exemples, et vous pouvez deviner ce que ces redistributions signifient, et comment l'utiliser à 100% selon l'idée des développeurs si ce n'est pas expliqué. A en juger par ces 3 lignes qui sont écrites ici, je pense que ArrayResize(arr,1000,1000) ; crée un tableau de 2 mille éléments. Mais ce n'est pas clair ici. Si je fais ArrayResize(arr,1,1000) ; par exemple, 1000 restera inactif jusqu'à ce que le tableau atteigne 1000.

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

Ou le programme utilisera ce fragment avant l'overclocking, en incrémentant simplement le compteur. Ou bien ce 1000 est juste là pour récupérer rapidement la mémoire du CPU, si c'est le cas, la mémoire de sauvegarde devra aussi être transférée, alors il est plus facile de travailler sans sauvegarde. En général, pas de code, pas d'informations, pas d'images, aucune idée de comment ça marche.

 
Avez-vous déjà rencontré cette situation où le disque dur est chargé à 100% par une classe système quelconque (sur 10ka) ? Cela arrive aussi avec le terminal alps... Habituellement, les terminaux chargent le disque pendant les tests, mais ici c'est juste kabda... Pas long, 3-5 secondes, mais concret
 
Yevhenii Levchenko:
Cela vous arrive-t-il que votre disque dur démarre à 100% une sorte de classe système (sur 10) ? Cela arrive aussi avec le terminal alps... Habituellement, les terminaux chargent le disque pendant les tests, mais ici c'est juste kabbda... Pas long, 3-5 secondes, mais concret

se produit, mais après le redémarrage du PC

10 à 15 minutes après le redémarrage du PC, Windows Defender "mâche le disque" et des statistiques sur l'utilisation du PC sont collectées

solution - suspendre le PC, mon PC peut tenir un mois sans redémarrer, j'appuie sur le bouton de veille du clavier au lieu d'éteindre le PC - quelques fois, l'électricité a été coupée, mais Win10 a pu démarrer sans problème si le PC était en veille.

 
Seric29:

Le problème, c'est qu'il n'y a pas d'images ou d'exemples, et que vous pouvez deviner ce que ces redistributions signifient, et comment les utiliser à 100% selon l'idée des développeurs si ce n'est pas expliqué. A en juger par ces 3 lignes qui sont écrites ici, je pense que ArrayResize(arr,1000,1000) ; crée un tableau de 2 mille éléments. Mais ce n'est pas clair ici. Si je fais ArrayResize(arr,1,1000) ; par exemple, 1000 restera inactif jusqu'à ce que le tableau atteigne 1000.

Ou le programme utilisera ce fragment avant l'overclocking, en incrémentant simplement le compteur. En général, je dis que ce n'est pas clair et c'est tout. Ou bien ce 1000 c'est juste stupide de traîner pour récupérer rapidement la mémoire du processeur, si c'est le cas alors tout de même et la mémoire de secours, aussi, devra être transférée alors il est plus facile de travailler sans la réserve. En général, pas de code, pas d'informations, pas d'images, aucune idée de comment ça marche.

Vous devez lire non seulement les trois lignes de code, mais aussi le texte qui explique tout très clairement.

La mémoire réservée et la taille du tableau sont des notions différentes. Si vous surchargez la taille du tableau avec ArrayResize(arr,1000,1000) ; le dernier élément du tableau sera 999 et pas plus. Mais si vous devez augmenter la taille du tableau, il n'y aura pas de réallocation de mémoire. Si vous n'avez pas besoin d'une telle réserve de taille, réduisez-la ou ne la réservez pas du tout.

 

Bonjour !
Je veux mettre un paramètre sous forme de tableau dans une fonction. Je n'arrive pas à trouver comment le faire correctement. Pouvez-vous corriger l'exemple ?

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

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

Bonjour !
Je veux mettre un paramètre sous forme de tableau dans une fonction. Je n'arrive pas à trouver comment le faire correctement. Pouvez-vous corriger l'exemple ?

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

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

Merci !

Raison: