![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
Es geht nicht um meine Umsetzung. Sie können es auf die altmodische Weise messen.
Dennoch würde ich gerne eine begründete Stellungnahme zur Unterstützung der Arbeit mit Zeigern hören. Alles, was bisher geäußert wurde, ist: "angeblich schneller", "bringt Programmierer angeblich dazu, auf den Speicher zu achten und keinen unnötigen Platz zuzuweisen" und "du bist ein Narr" - natürlich.
Auch links-rechts verwirrt oder nicht?
Es ist einfach ein ungeheuerliches Durcheinander im Kopf. Zeiger sind langsamer, nicht schneller. Über die Notwendigkeit, auf den Speicher aufzupassen, wurde im Zusammenhang mit den Unterschieden im Programmierstil in Sprachen mit und ohne Garbage Collector gesprochen.
Vasya, du weißt schon nach 2-3 Beiträgen nicht mehr, welchen Standpunkt du in der Diskussion eingenommen hast, es geht mal so und mal so weiter.
Ein Beispiel für ein mögliches Problem wäre gut.
Ein weiterer Punkt. Es ist besser, Arrays von Objekten mit Hilfe eines Zeigers zu erstellen. Andernfalls erhalten Sie ein Array im Stapelspeicher, das sehr klein ist:
Ich hatte ein Beispiel für die Erschöpfung des Stapelspeichers nur im Falle einer rekursiven Sortierung mit großen Datenmengen.
Das Programm blieb einfach hängen.
Außerdem können Sie globale Deklarationen verwenden, und in diesem Fall handelt es sich nicht um Stapelspeicher.
Meinen Sie nicht auch?
Das ist kein Problem, geschweige denn ein potenzielles Problem. Das liegt nur an den Eigenheiten der Speicherverwaltung in MT. Hier ist ein statisches Array:
Und hier ist ein dynamisches Array:
In diesem Fall wird alles kompiliert und funktioniert.
Dem stimme ich zu, aber ich habe in meiner Praxis noch nie solche Mengen gehabt.
In der Regel benötige ich z.B. eine schnelle Berechnung eines Indikator-"Schwanzes", ohne die eingebaute Indikatorfunktion (Bibliothek) selbst aufzurufen,
, daher habe ich eine schnellere formelbasierte Berechnung von Indikatorwerten angewandt. In diesem Fall ist der Speicherverbrauch im Allgemeinen sehr gering.
Generell empfehle ich diesen Ansatz allen Entwicklern in Zukunft, um Speicher und Zeit bei der Berechnung von Funktionen mit Fließkomma zu sparen.
Wenn möglich, sollten viele Daten in das Ganzzahlformat konvertiert werden - das beschleunigt den Prozess erheblich.
P.S.: Natürlich geht es hier um die Einsparung von z.B. ein paar hundert Millisekunden.
Ich mache einen solchen Kurs.
Jetzt möchte ich ein Objekt-Array aufrufen:
Wie kann man dann schnell ein Array von Objekten erstellen, wenn der Konstruktor Parameter auf globaler Ebene hat?
Erstellen Sie zum Beispiel zuerst Objekte, indem Sie den Konstruktor ändern, und wie kann ich dann die Objekte in OnInit durch Symbole ersetzen?
Gibt es vielleicht eine einfachere Lösung?
In der Deklaration der Klasse Strategy2 fehlt im Namen des Klassenkonstruktors selbst die "2", da es sich sonst nicht um einen Konstruktor handelt.