Fragen zu OOP in MQL5 - Seite 10

 
Vasiliy Sokolov:

...Welche Variante in MQL verwendet wird, ist unbekannt...

In MQL gibt es keinen Müllsammler.
 
Vasiliy Sokolov:

Guten Tag. Computerspeicher hat die gleiche Leistung, unabhängig davon, ob er im Stack- oder Heap-Kontext verwendet wird. Die dynamische Speicherverwaltung selbst hängt von der Implementierung des Müllsammlers ab: Sie kann z. B. durch Referenzzählung wie in Python (langsamere Version) oder durch Analyse der Epochen der Objekterzeugung mit Traversal des Ausführungsgraphen im Hintergrundprozess (Net CLR) erfolgen. Welche Variante in MQL verwendet wird, ist nicht bekannt, aber wir können davon ausgehen, dass sie äußerst effizient ist, da dem Benutzer von MQL5 der Löschoperator direkt zur Verfügung steht, was die Arbeit von GC selbst stark vereinfacht. Daher sind Ihre Bedenken bezüglich des Overheads bei der Verwendung von new unbegründet - Sie können gerne dynamischen Speicher verwenden.

Was den "Stapelüberlauf" betrifft, so kann dieser Fall in modernen Systemen nur dann eintreten, wenn eine komplexe Rekursion verwendet wird oder ein Fehler im rekursiven Algorithmus gemacht wird. Ein modernes Programm arbeitet immer im OC-geschützten Modus im virtuellen Adressraum, mit dynamischem Laden von Speicherseiten, also keine Sorge: der Stack wird nicht überlaufen:)

Falsche Aussage.

 
Dmitry Fedoseev:
In MKL gibt es keine Müllabfuhr.

Woher stammen die Informationen? Worauf ist MT4 / MT5 geschrieben? - irgendwelche Informationen?

;)

ZS: das Maximum, das frei verfügbar ist, ist ein Stellenangebot von Metakvot, es gibt schriftliche Anforderungen für Programmierer an Bewerber ;)

 
Igor Makanu:

Woher stammen die Informationen? Worauf ist MT4 / MT5 geschrieben? - irgendwelche Informationen?

;)

ZS: das Maximum, das frei verfügbar ist - Stellenausschreibungen von Metakvot, es gibt schriftliche Anforderungen für Programmierer an Bewerber ;)

Welchen Unterschied macht es, in welcher Sprache er geschrieben ist? In mql werden Objekte, die mit new erstellt wurden, nicht von selbst gelöscht. Übrigens, auch nicht in C++))

 
Dmitry Fedoseev:
In MKL gibt es keine Müllabfuhr.

Dimitri, du irrst dich. Hier sind drei Gründe, warum MetaTrader doch einen Müllsammler hat:

  1. MQL5 löscht automatisch Objekte, die nicht neu erstellt wurden. Zeiger auf solche Objekte haben den Typ AUTOMATIC. Sie können automatisch gelöscht werden, entweder durch den Heiligen Geist oder durch die Müllabfuhr.
  2. Mehr als einmal haben die Entwickler erwähnt, dass das MQL5-Programm von der MetaTrader-internen virtuellen Maschine ausgeführt wird. Wenn es eine virtuelle Maschine gibt, dann muss es auch den Müllsammler geben.
  3. Wenn ein dynamisches Objekt nicht wie vom Benutzer gewünscht gelöscht wurde, zeigt der MetaTrader dies mit der Meldung "leaked memmory" an und gibt an, wie viele und welche Objekte nicht gelöscht wurden. Das heißt, MetaTrader weiß tatsächlich, wie viel und was zugewiesen wurde - d.h. es ist offensichtlich, dass es ein parallel laufendes System gibt, das den Umgang mit dem Speicher kontrolliert, das ist der Müllsammler.
 
Dmitry Fedoseev:

Falsche Aussage.

P.S. Du hast dich im Laufe der Jahre allerdings sehr verändert. Sie sind ein bisschen boshaft geworden. Ich erinnere mich, dass Sie früher viele konstruktive Vorschläge gemacht haben. Jetzt zanken Sie sich ständig: sinnlose Argumente / Dementis / Denunziationen. Wozu ist das alles gut? Du willst mich härter schlagen? - Ich gebe dir auch einen Stein: Schlag mich, wie du willst, aber du tust mir trotzdem leid.

 
Vasiliy Sokolov:

Dimitri, du irrst dich. Hier sind drei Gründe, warum MetaTrader doch einen Müllsammler hat:

  1. MQL5 löscht automatisch Objekte, die nicht neu erstellt wurden. Zeiger auf solche Objekte haben den Typ AUTOMATIC. Sie können automatisch gelöscht werden, entweder durch den Heiligen Geist oder durch die Müllabfuhr.
  2. Mehr als einmal haben die Entwickler erwähnt, dass das MQL5-Programm von der MetaTrader-internen virtuellen Maschine ausgeführt wird. Wenn es eine virtuelle Maschine gibt, dann muss es auch den Müllsammler geben.
  3. Wenn ein dynamisches Objekt nicht wie vom Benutzer gewünscht gelöscht wurde, zeigt der MetaTrader dies mit der Meldung "leaked memmory" an und gibt an, wie viele und welche Objekte nicht gelöscht wurden. MetaTrader weiß also genau, wie viel und was zugewiesen wurde - es ist offensichtlich, dass es ein parallel laufendes System gibt, das die Speicherverwaltung steuert, das ist ein Müllsammler.

1. nicht der Heilige Geist und nicht der Müllsammler.

2.3 Sie können endlos phantasieren.

 
Vasiliy Sokolov:

Z.I. Du hast dich im Laufe der Jahre sehr verändert. Du bist ein bisschen verbittert geworden. Ich erinnere mich, dass Sie früher viele konstruktive Vorschläge gemacht haben. Jetzt zanken Sie sich ständig: nur sinnlose Argumente / Leugnungen / Denunziationen. Wozu ist das alles gut? Du willst mich härter schlagen? - Ich gebe dir selbst einen Stein: Schlag mich, wie du willst, aber du tust mir trotzdem leid.

Schluchzend!

 
Dmitry Fedoseev:

1. weder ein heiliger Geist noch ein Müllsammler.

2.3 Der Phantasie sind keine Grenzen gesetzt.

Lassen Sie uns die Dokumente lesen. Der new-Operator gibt keinen Zeiger auf ein Objekt zurück, sondern einen Objektdeskriptor. Ich wage vorzuschlagen, dass jede Klasse in einen Wrapper verpackt wird, der das vergessene Objekt beim Minimieren des Programms sicher tötet und gleichzeitig freundlich auf das Vorhandensein von Lecks hinweist. Im Allgemeinen sollte dieser Mechanismus am besten den Urhebern überlassen werden, die sich dazu äußern sollten.
 
Vladimir Simakov:
Lassen Sie uns die Dokumente lesen. Der new-Operator gibt keinen Zeiger auf ein Objekt zurück, sondern einen Objektdeskriptor. Ich wage vorzuschlagen, dass jede Klasse in einen Wrapper verpackt wird, der das vergessene Objekt beim Minimieren sicher tötet und gleichzeitig freundlich auf bestehende Lecks hinweist. Im Allgemeinen sollte dieser Mechanismus am besten den Urhebern überlassen werden, die sich dazu äußern sollten.

Ja, es löscht und schreibt eine Meldung über Speicherlecks, nur damit die Programmierer, die EAs schreiben, sich nicht langweilen.

Es ist interessant, dass es gestern noch ein Speicherleck gab und heute nicht einmal mehr eines sein kann.

Und da wir gerade von Vögeln sprechen... Deskriptoren sind auch Wegweiser. Das Wort selbst ändert nichts, egal ob es sich um einen Deskriptor, einen Zeiger oder einen Bezeichner handelt.