Questions sur la POO dans MQL5 - page 10

 
Vasiliy Sokolov:

...On ne sait pas quelle variante est utilisée dans MQL...

Il n'y a pas de collecteur d'ordures à MQL.
 
Vasiliy Sokolov:

Bon après-midi. La mémoire des ordinateurs a les mêmes performances, qu'elle soit utilisée dans un contexte de pile ou de tas. La gestion dynamique de la mémoire dépend elle-même de l'implémentation du collecteur de déchets : par exemple, il peut s'agir d'un comptage de références comme dans Python (variante plus lente) ou d'une analyse des époques de génération des objets avec traversée du graphe d'exécution en arrière-plan (Net CLR). On ne sait pas quelle variante est utilisée dans MQL, mais on peut supposer qu'elle est extrêmement efficace, car l'utilisateur de MQL5 a accès à l'opérateur delete directement, ce qui simplifie grandement le travail de GC lui-même. Par conséquent, vos préoccupations concernant les frais généraux lors de l'utilisation de new sont sans fondement - n'hésitez pas à utiliser la mémoire dynamique.

Quant au "dépassement de pile", la seule façon de rencontrer ce cas dans les systèmes modernes est d'utiliser une récursion complexe ou de faire une erreur dans l'algorithme récursif. Un programme moderne fonctionne toujours en mode protégé OC dans l'espace d'adressage virtuel, avec un chargement dynamique des pages de mémoire, donc ne vous inquiétez pas : la pile ne débordera pas :)

Fausse déclaration.

 
Dmitry Fedoseev:
Il n'y a pas de collecteur d'ordures dans MKL.

D'où vient l'information ? Sur quoi est écrit MT4 / MT5 ? - des informations ?

;)

ZS : le maximum qui est librement disponible - les offres d'emploi de Metakvot, il y a des exigences écrites pour les programmeurs aux candidats ;)

 
Igor Makanu:

D'où vient l'information ? Sur quoi est écrit MT4 / MT5 ? - des informations ?

;)

ZS : le maximum qui est librement disponible - les offres d'emploi de Metakvot, il y a des exigences écrites pour les programmeurs aux candidats ;)

Quelle différence cela fait-il de savoir en quoi il est écrit ? Dans mql, les objets créés avec new ne sont pas supprimés par eux-mêmes. Au fait, ni l'un ni l'autre en c++))

 
Dmitry Fedoseev:
Il n'y a pas de collecteur d'ordures dans MKL.

Dimitri, vous avez tort. Voici trois raisons pour lesquelles MetaTrader dispose d'un collecteur d'ordures après tout :

  1. MQL5 supprime automatiquement les objets créés sans nouveau. Les pointeurs vers ces objets sont de type AUTOMATIQUE. Ils peuvent être supprimés automatiquement soit par le Saint-Esprit, soit par le collecteur d'ordures.
  2. Plus d'une fois, les développeurs ont mentionné que le programme MQL5 est exécuté par la machine virtuelle interne de MetaTrader. S'il y a une machine virtuelle, il doit aussi y avoir le collecteur de déchets.
  3. Si un objet dynamique n'a pas été supprimé à la demande de l'utilisateur, MetaTrader le signale par un message de "fuite de mémoire" indiquant combien et quels objets n'ont pas été supprimés. C'est-à-dire que MetaTrader sait en fait combien et ce qui a été alloué - c'est-à-dire qu'il est évident qu'il existe un système fonctionnant en parallèle qui contrôle la gestion de la mémoire, c'est le collecteur de déchets.
 
Dmitry Fedoseev:

Fausse déclaration.

P.S. Tu as beaucoup changé au fil des ans, cependant. Tu es devenu un peu rancunier. Je me souviens que vous aviez l'habitude d'offrir beaucoup de suggestions constructives. Maintenant, vous vous chamaillez constamment : arguments / démentis / dénonciations sans intérêt. A quoi ça sert ? Tu veux me frapper plus fort ? - Je vais te donner une pierre moi-même : frappe-moi comme tu veux, mais je te plains quand même.

 
Vasiliy Sokolov:

Dimitri, vous avez tort. Voici trois raisons pour lesquelles MetaTrader dispose d'un collecteur d'ordures après tout :

  1. MQL5 supprime automatiquement les objets créés sans nouveau. Les pointeurs vers ces objets sont de type AUTOMATIQUE. Ils peuvent être supprimés automatiquement soit par le Saint-Esprit, soit par le collecteur d'ordures.
  2. Plus d'une fois, les développeurs ont mentionné que le programme MQL5 est exécuté par la machine virtuelle interne de MetaTrader. S'il y a une machine virtuelle, il doit aussi y avoir le collecteur de déchets.
  3. Si un objet dynamique n'a pas été supprimé à la demande de l'utilisateur, MetaTrader le signale par un message de "fuite de mémoire" indiquant combien et quels objets n'ont pas été supprimés. MetaTrader sait donc exactement combien et ce qui a été alloué - il est évident qu'il existe un système fonctionnant en parallèle qui contrôle la gestion de la mémoire, c'est un collecteur de déchets.

1. pas le saint esprit et pas le collecteur d'ordures.

2.3 Vous pouvez fantasmer à l'infini.

 
Vasiliy Sokolov:

Z.I. Tu as beaucoup changé au fil des ans. Tu es devenu un peu aigri. Je me souviens que vous aviez l'habitude d'offrir beaucoup de suggestions constructives. Maintenant, vous vous chamaillez sans cesse : ce ne sont que des arguments / dénis / dénonciations insensés. A quoi ça sert ? Tu veux me frapper plus fort ? - Je vais vous donner une pierre moi-même : frappez-moi comme vous voulez, mais je vous plains quand même.

Sanglotant !

 
Dmitry Fedoseev:

1. ni un esprit saint, ni un collecteur d'ordures.

2.3 L'imagination est sans limite.

Lisons les docs. L'opérateur new ne renvoie pas un pointeur vers un objet, mais un descripteur d'objet. J'ose suggérer que toute classe est enveloppée dans un wrapper qui tue en toute sécurité l'objet oublié lors de la réduction du programme et qui, en même temps, indique gentiment la présence de fuites. En général, il serait préférable de laisser aux créateurs le soin de commenter ce mécanisme.
 
Vladimir Simakov:
Lisons les docs. L'opérateur new ne renvoie pas un pointeur vers un objet, mais un descripteur d'objet. J'ose suggérer que toute classe est enveloppée dans un wrapper qui tue en toute sécurité l'objet oublié lors de la minimisation, tout en indiquant gentiment les fuites existantes. En général, il serait préférable de laisser aux créateurs le soin de commenter ce mécanisme.

Oui, il supprime et écrit un message sur les fuites de mémoire, juste pour que les programmeurs qui écrivent les EA ne s'ennuient pas dans leur vie.

C'est intéressant de voir comment hier il y avait une fuite de mémoire et aujourd'hui il ne peut même pas y en avoir.

Et en parlant d'oiseaux... les descripteurs sont aussi des pointeurs. Et vous savez, le mot lui-même ne change rien, qu'il s'agisse d'un descripteur, d'un pointeur, d'un identifiant.