Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 162

 
Nikolai Semko:


für Strukturen und Klassen, die Zeichenketten oder dynamische Arrays oder Klassenreferenzen enthalten, zeigt sizeof() mit dem Finger auf den Himmel.

und ich kann es verstehen :-)

 
Nikolai Semko:


Der String-Typ in mql ist sehr kompliziert und wird in der Dokumentation nicht vollständig offengelegt.
Aber es kann aus der Sprache C erraten werden, dass char array (buffer) in string type verpackt ist
Und dann fängt man an zu tanzen und zu verstehen, wie es funktioniert ))

 
Roman:

Der String-Typ in mql ist sehr kompliziert und wird in der Dokumentation nicht vollständig offengelegt.
Die Sprache C legt jedoch nahe, dass der Stringtyp ein Char-Array (Puffer) ist
Und dann fängt man an zu tanzen und zu verstehen, wie es funktioniert ))

In C gibt es keine Zeichenketten.

 
Maxim Kuznetsov:

für Strukturen und Klassen, die Zeichenketten oder dynamische Arrays oder Klassenreferenzen enthalten, zeigt sizeof() mit dem Finger auf den Himmel.

und ich kann es verstehen :-)

Aber warum?
Bei jedem dynamischen Array wird die Größe des dynamischen Array-Objekts angezeigt, die in MQL5 52 Byte beträgt


 
Nikolai Semko:

In C gibt es keine Tangas.

Ich glaube, das ist bereits der Fall, aber darum geht es nicht.
Ja, C hat char[], es ist in mql String verpackt

 
Nikolai Semko:

Aber warum?
Bei jedem dynamischen Array wird die Größe des dynamischen Array-Objekts angezeigt, die in MQL5 52 Byte beträgt

die Größe von was und für wen wird es zeigen?

52 Bytes sind nur ihr internes Gerät.

Warum es nicht 64 sind, ist unklar, sie könnten sich angeglichen haben :-)

 
Roman:

Ich glaube, das ist bereits der Fall, aber darum geht es nicht.
Ja, C hat char[], es ist in mql String verpackt

Nun, das verstehe ich.
Ich verwende überhaupt keine String-Funktionen. Ich konvertiere sie sofort mit der Funktion StringToCharArray in ein Char-Array und arbeite dann mit diesem Array. Ich habe festgestellt, dass dies viel effizienter ist.

Vor allem, wenn es um das Parsing geht.

 
Maxim Kuznetsov:

die Größe von was und für wen wird es zeigen?

52 Bytes ist nur ihre interne Struktur.

Es ist nicht klar, warum es nicht 64 ist, sie hätten es ja auch ausrichten können :-)

Wahrscheinlich handelt es sich um eine Art Struktur mit verschiedenen Typen. Zum Beispiel, 5 ulong und 3 uint. Möglicherweise ist die Zeit für die interne Verarbeitung und die Zeit des letzten Zugriffs vorhanden. ICH WEISS ES NICHT. Wer weiß, was diese Struktur enthalten könnte.

 
Nikolai Semko:

Nun, das ist verständlich.
Ich verwende überhaupt keine String-Funktionen. Ich konvertiere sie sofort mit der Funktion StringToCharArray in ein Char-Array und arbeite dann mit diesem Array. Ich habe festgestellt, dass dies viel effizienter ist.

Höchstwahrscheinlich ist die mql-Zeichenkette short[] oder wchar_t[] oder wchar_t*.
Schließlich sind mql-Strings in Unicode, während utf 2 Bytes lang ist.
Und StringToCharArray konvertiert von short[] nach char[].

 
Roman:

Und höchstwahrscheinlich gibt es unter mql string short[]
Schließlich gibt es in mql 2 Bytes in einem String in Unicode.
Und StringToCharArray konvertiert von short[] nach char[]

nein, das hätte ich bemerkt. Obwohl ich nicht ausschließe, dass dies in einigen Fällen (bei der Arbeit mit Unicode) möglich ist. In Java zum Beispiel ist der Typ char 2 Byte groß.
Ich habe versucht, Daten von Crypto-Exchange in zwei Varianten zu parsen: über diese JSON-Bibliothek und über die Arbeit mit Char-Array.
Der Unterschied betrug das 700(!!!)-fache der Geschwindigkeit. Ich war schockiert. Vielleicht war es bei weitem nicht die beste JSON-Implementierung.

Grund der Beschwerde: