![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
GUT. Das verstehe ich nicht. Verstehen Sie das? Sind Sie sicher, dass Sie das verstehen? Was genau?
Das Argument läuft auf die folgende Aussage hinaus:
...
Dabei ging es nicht um einen allgemeinen Streit, sondern um eine Situation, die einen einzelnen Beitrag betraf, und ich habe erklärt, worin das Problem bestand. Okay, es gab keine Katastrophe.
Deklariertes Array double x[268435448];
Das gleiche Array in der Funktion OnStart().
Außerdem wurde ein rekursiver Aufruf mit LONG_MAX Tiefe durchgeführt.
Keine Probleme.
Verwenden Sie keine statischen Arrays?
groß. Wenn die Größe des Feldes klein, konstant und im Voraus bekannt ist, ist statisch besser und wahrscheinlich schneller.
groß. Wenn die Größe des Feldes klein, konstant und im Voraus bekannt ist, ist statisch besser und wahrscheinlich schneller.
Ich würde gerne eine Möglichkeit haben, eine Liste von statischen Variablen/Arrays und deren Größen zu erhalten. Wahrscheinlich braucht man einen Code-Parser wie hier.
Ich schätze, ein statisches String-Array und ein Double-Array sind ganz unterschiedliche Dinge.
Ich schätze, dass statische String-Arrays und Double-Arrays ganz unterschiedliche Dinge sind.
string ist im Wesentlichen eine interne Klasse, die aus einem Zeiger und int size besteht, d.h. für double array wird bedingt 1,5 mal weniger Platz benötigt
Ich glaube nicht, dass es viel Sinn macht, sich damit zu beschäftigen, es sei denn, Sie haben statische Arrays mit Millionen von Elementen.
Keine statischen Arrays verwenden?
Es gibt also im Wesentlichen vier Arten von Daten in MQL:
Wenn wir den Stack den Funktionen und ihren lokalen Variablen überlassen, haben wir nur noch drei Typen, mit denen wir arbeiten können. Ich persönlich bin der Meinung (und das ist nur meine Meinung), dass Daten, die mit automatischer Lebensdauer definiert werden, die Vorteile der beiden vorgenannten Arten gut vereinen, ohne deren Nachteile. Daten, die mit automatischen Zeigern definiert werden, sind ebenso vorhersehbar und sicher wie statische, aber ebenso flexibel wie dynamische, manuell gesteuerte Daten. Mit Vorhersehbarkeit meine ich Szenarien, in denen es nicht notwendig ist, zusätzliche Überprüfungen der Zeigerbits vorzunehmen und sich zu fragen, ob jemand anderes die Daten bereits vorher gelöscht hat. Mit Flexibilität meine ich Szenarien, in denen man mit Daten, auf die ein Auto-Zeiger verweist, wie mit einem normalen Zeiger arbeiten kann, indem man den Zeiger an eine Funktion übergibt oder, bei Arrays, indem man ihn wiederverwertet.
Um zu veranschaulichen, was ich gerade gesagt habe, können Sie den ursprünglichen Code von Ihor Herasko und den gleichen Code, den ich für POINTER_AUTOMATIC geschrieben habe, vergleichen. Es gibt keine zusätzlichen Prüfungen und Initialisierungen, kein 60 000 000-maliges Löschen durch einen Operator. All dies spart Ihnen Zeit, Mühe und - was auch wichtig ist - Ressourcen. Wenn man sie versteht, braucht man fast nie mit Zeigern zu arbeiten. Sie können jederzeit einen solchen Algorithmus schreiben, der diese Arbeit entweder minimiert oder gar nicht erst anfängt. Zum Beispiel behandle ich Objekte in meinem Code nie manuell - das ist einfach nicht nötig. Was statische Arrays angeht, so muss ich sie manchmal verwenden, um zum Beispiel die benötigten Daten in das Programm einzubauen, aber das sind so spezielle Dinge, dass normale Benutzer sie nicht brauchen, nehme ich an. Am besten ist es, fertige Sammlungen wie CArrayObj oder eigene zu verwenden. Mit Templates und MQL-Funktionen können Sie nun sehr flexible Dinge erstellen, die viel besser sind als statische Arrays.
Vasiliy Sokolov #:
Statische, vordefinierte Daten. Zur Kompilierzeit in das Programm eingefügt und nicht mehr geändert. Sie werden in einem privaten Speicherbereich gespeichert. Dies sind zum Beispiel statische Arrays vom Typ char[1024].
Wenn das Array nicht initialisiert ist,
warum sollte sie in EX5 aufgenommen werden?
Wenn das Array nicht initialisiert ist,
warum sollte es in EX5 eingefügt werden?
Ja, das stimmt, die nicht initialisierten sind natürlich nicht eingenäht. Die initialisierten schon. Die Größen der beiden Typen werden jedoch zum Zeitpunkt der Kompilierung festgelegt und ändern sich nicht mehr. Das heißt, statische Arrays können bedingt in zwei Gruppen unterteilt werden.
In emcool gibt es keinen Müllsammler.
Offiziell, ja. Inoffiziell deutet vieles darauf hin, dass es sie gibt: