Erreurs, bugs, questions - page 1337

 
Artyom Trishkin:
Si "balancement", vous auriez pu le comparer à un arbre : "droite/gauche" - vous avez aussi de l'humour (fusion "droite/gauche")

"balancement" du bateau ,

Et le truc de la fusion droite/gauche n'est pas ma faute, c'est celle de Firefox.

 
Si vous compilez des fichiers dans ME, se trouvant dans le dossier Projets, les fichiers compilés sont créés dans les dossiers appropriés Experts, Indicateurs, Scripts. Mais si je compile avec un compilateur séparé, cela ne se produit pas - les fichiers compilés sont créés dans le dossier avec la source. Est-ce que c'est censé être comme ça ou faut-il utiliser les touches appropriées ?
 

Sur les caractères BR-8.15 et BR-10.15, les autres périodes BR sont correctes.

build 1150 ouverture réelle win7 x64 max

Fichiers vidéo .mp4 dans la bande-annonce.

+ sur la période M1 (par exemple)

Si vous appuyez sur le bouton "autoscroll chart to the end with the arrival of new ticks" - le graphique est déplacé au début.

Ensuite, si vous appuyez sur la touche "END", le graphique se déplace vers la fin pendant une seconde et à nouveau - il se déplace vers le début.

Dossiers :
br-bag.zip  7609 kb
br-bag2.zip  3720 kb
 
Alexey Navoykov:

Je n'y avais pas prêté attention auparavant, mais maintenant, en travaillant avec de grands tableaux d'objets de classe, j'ai remarqué une consommation de mémoire trop importante. Je l'ai vérifié par sizeof() et une classe absolument vide prend 16 octets. Et considérant que les classes ici sont gérées, nous ajoutons 8 octets supplémentaires par pointeur. Le total est de 24 octets. C'est trop cher.

J'ai regardé la documentation et j'ai vu ce que j'y ai trouvé :

La question est de savoir pourquoi les classes simples (celles qui ne participent pas à l'héritage) ont besoin de la table des fonctions virtuelles, puisque tout est connu sur ces classes au stade de la compilation.

Il s'avère que lesméthodes qu'ils contiennent sont appelées de la même manière que les méthodes virtuelles, c'est-à-dire qu'il y a une redirection supplémentaire de l'accès à travers la table. Et où est la louable optimisation du compilateur ? Comment pouvons-nous affirmer après cela une comparaison des performances avec C++ ?

L'hypothèse mise en évidence est incorrecte, seules les méthodes virtuelles sont appelées par la table et mon affirmation n'est pas seulement vraie pour le compilateur MQL.
En outre, MQL, certains appels virtuels sont exécutés comme des appels de fonction normaux, et non par le biais de la table.
Comme Renat l'a écrit, les classes dans MQL ont toujours une table virtuelle, qui prend 8 octets + 8 octets de méta-information.
 
Vladimir Pastushak:

Les développeurs ne manquent pas d'humour.

Il me semble qu'il s'agit d'un téléchargement, et d'une sorte de balancement de l'arbre "Téléchargement" vers la droite ou la gauche.

Merci, corrigé en "Téléchargement".
 
Ilyas:
L'hypothèse mise en évidence est incorrecte, seules les méthodes virtuelles sont appelées par la table et ma déclaration n'est pas seulement vraie pour le compilateur MQL.
En outre, dans MQL, certains appels virtuels sont effectués comme des appels de fonction normaux, et non via une table.
Comme Renat l'a écrit, les classes dans MQL ont en effet toujours une table virtuelle qui prend 8 octets + 8 octets de méta-information.
Quoi qu'il en soit, pourriez-vous clarifier pourquoi une simple classe, qui n'hérite de personne et ne participe donc pas à la virtualisation, a besoin d'une table ? Renat a mentionné les destructeurs virtuels, mais dans notre cas, il n'y a rien à virtualiser. Il n'y a qu'un seul destructeur, donc il peut être inlined aussi, n'est-ce pas ? Cela ne laisse que 8 octets de métadonnées.
 
Alexey Navoykov:
Merci pour la réponse, mais pourriez-vous expliquer pourquoi une simple classe, qui n'est héritée de personne et ne participe donc pas à la virtualisation, a besoin d'une table ? Renat a mentionné les destructeurs virtuels, mais dans ce cas il n'y a rien à virtualiser. Il n'y a qu'un destructeur, donc il peut être inlined aussi, n'est-ce pas, laissant ainsi seulement 8 octets de métadonnées.
Si une classe n'est pas héritée, son destructeur est appelé comme une fonction non virtuelle normale et inline si elle répond aux critères inline.

Le système d'exécution (environnement de programme MQL) est construit en partant du principe qu'une classe occupe au moins 16 octets.
 
Si vous compilez des fichiers dans ME qui se trouvent dans le dossier Projets, les fichiers compilés sont créés dans les dossiers Experts, Indicateurs, Scripts correspondants. Mais si je compile avec un compilateur séparé, cela ne se produit pas - les fichiers compilés sont créés dans le dossier avec la source. Est-ce que c'est censé être comme ça ou faut-il utiliser les touches appropriées ?
 

build 854 vin 10 64 x

Lors du test d'EAs avec visualisation, lorsque l'on essaie de fermer une autre fenêtre précédemment ouverte que la fenêtre de travail actuelle avec le test, le test est interrompu ...

Fermé par le bouton central de la souris et le menu contextuel ...

 
Vladimir Pastushak:

build 854 vin 10 64 x

Lors du test d'EAs avec visualisation, lorsque l'on essaie de fermer une autre fenêtre précédemment ouverte que la fenêtre de travail actuelle avec le test, le test est interrompu ...

Fermé par le bouton central de la souris et le menu contextuel ...

Pas de lecture.

Une lecture stable ? Si oui, décrivez plus en détail les étapes de la lecture.