Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 162

 
Nikolai Semko:


per strutture e classi che includono stringhe o array dinamici o riferimenti di classe, sizeof() punterà il dito verso il cielo.

e posso capirlo :-)

 
Nikolai Semko:


Il tipo di stringa in mql è molto complicato, e non è completamente rivelato nella documentazione.
Ma si può intuire dal linguaggio C, che l'array di char (buffer) è avvolto nel tipo di stringa
E poi si inizia a ballare per capire come funziona ))

 
Roman:

Il tipo di stringa in mql è molto complicato, e non è completamente rivelato nella documentazione.
Ma il linguaggio C suggerisce che il tipo di stringa è un array di char (buffer)
E poi si inizia a ballare per capire come funziona ))

Non ci sono stringhe in C.

 
Maxim Kuznetsov:

per strutture e classi che includono stringhe o array dinamici o riferimenti di classe, sizeof() punterà il dito verso il cielo.

e posso capirlo :-)

Ma perché?
Con qualsiasi array dinamico mostrerà la dimensione dell'oggetto array dinamico, che è 52 byte in MQL5


 
Nikolai Semko:

Non ci sono tanga in C.

Credo che ci sia già, ma non è questo il punto.
Sì, C ha char[], è avvolto nella stringa mql

 
Nikolai Semko:

Ma perché?
Con qualsiasi array dinamico mostrerà la dimensione dell'oggetto array dinamico, che è 52 byte in MQL5

la dimensione di cosa e per chi mostrerà?

52 byte è solo il loro dispositivo interno.

Perché non è 64 non è chiaro, potrebbero essersi allineati :-)

 
Roman:

Credo che ci sia già, ma non è questo il punto.
Sì, C ha char[], è avvolto nella stringa mql

Beh, lo capisco.
Non uso affatto le funzioni di stringa. Li converto immediatamente in un array di char usando la funzione StringToCharArray e poi lavoro con l'array. L'ho trovato molto più efficiente.

Soprattutto quando si tratta di fare il parsing.

 
Maxim Kuznetsov:

la dimensione di cosa e per chi mostrerà?

52 byte è solo la loro struttura interna.

Non è chiaro perché non sia 64, potrebbero averlo allineato :-)

Probabilmente una specie di struttura con diversi tipi. Per esempio, 5 ulong e 3 uint. Forse il tempo è presente per l'elaborazione interna e l'ora dell'ultimo accesso. NON LO SO. Chissà cosa può contenere questa struttura.

 
Nikolai Semko:

Beh, è comprensibile.
Non uso affatto le funzioni di stringa. Li converto immediatamente in un array di char usando la funzione StringToCharArray e poi lavoro con l'array. L'ho trovato molto più efficiente.

Molto probabilmente, la stringa mql è short[] o wchar_t[] o wchar_t*.
Dopo tutto, le stringhe mql sono in Unicode, mentre utf è di 2 byte.
E StringToCharArray converte da short[] a char[].

 
Roman:

E molto probabilmente sotto mql string c'è short[]
Dopo tutto, ci sono 2 byte in stringa in Unicode in mql.
E StringToCharArray converte da short[] a char[]

No, l'avrei notato. Anche se non escludo che in alcuni casi (quando si lavora con Unicode) sia possibile. In Java, per esempio, il tipo char è 2 byte.
Ho provato ad analizzare i dati dal crypto-exchange in due varianti: tramite questa libreria JSON e tramite il lavoro con l'array di char.
La differenza si è rivelata essere 700(!!!) volte per la velocità. Ero scioccato. Forse era lontano dalla migliore implementazione JSON.

Motivazione: