Caractéristiques du langage mql5, subtilités et techniques - page 162

 
Nikolai Semko:


pour les structures et les classes qui incluent des chaînes de caractères ou des tableaux dynamiques ou des références de classe, sizeof() pointera le doigt vers le ciel.

et je peux le comprendre :-)

 
Nikolai Semko:


Le type de chaîne dans mql est très compliqué, et n'est pas entièrement divulgué dans la documentation.
Mais on peut deviner, à partir du langage C, que le tableau de chars (tampon) est enveloppé dans un type de chaîne de caractères.
Et ensuite vous commencez à danser en comprenant comment cela fonctionne ;))

 
Roman:

Le type de chaîne dans mql est très délicat, et n'est pas entièrement divulgué dans la documentation.
Mais le langage C suggère que le type de chaîne de caractères est un tableau de caractères (tampon).
Et ensuite vous commencez à danser en comprenant comment cela fonctionne ;))

Il n'y a pas de cordes en C.

 
Maxim Kuznetsov:

pour les structures et les classes qui incluent des chaînes de caractères ou des tableaux dynamiques ou des références de classe, sizeof() pointera le doigt vers le ciel.

et je peux le comprendre :-)

Mais pourquoi ?
Avec n'importe quel tableau dynamique, il affichera la taille de l'objet tableau dynamique, qui est de 52 octets dans MQL5.


 
Nikolai Semko:

Il n'y a pas de strings en C.

Je pense que c'est déjà le cas, mais là n'est pas la question.
Oui, C a char[], il est enveloppé dans la chaîne mql

 
Nikolai Semko:

Mais pourquoi ?
Avec n'importe quel tableau dynamique, il affichera la taille de l'objet tableau dynamique, qui est de 52 octets dans MQL5.

la taille de ce qu'il montrera et pour qui ?

52 octets est leur dispositif interne seulement.

La raison pour laquelle il n'est pas 64 n'est pas claire, ils auraient pu s'aligner :-)

 
Roman:

Je pense que c'est déjà le cas, mais là n'est pas la question.
Oui, C a char[], il est enveloppé dans la chaîne mql

Je comprends ça.
Je n'utilise pas du tout les fonctions de chaîne. Je les convertis immédiatement en un tableau de caractères à l'aide de la fonction StringToCharArray, puis je travaille avec ce tableau. Je l'ai trouvé beaucoup plus efficace.

Surtout quand il s'agit d'analyse syntaxique.

 
Maxim Kuznetsov:

la taille de ce qu'il montrera et pour qui ?

52 octets, c'est seulement leur structure interne.

On ne sait pas pourquoi ce n'est pas 64, ils auraient pu l'aligner :-)

Probablement une sorte de structure avec différents types. Par exemple, 5 ulong et 3 uint. Le temps est peut-être présent pour le traitement interne et l'heure du dernier accès. JE NE SAIS PAS. Qui sait ce que cette structure peut contenir.

 
Nikolai Semko:

Eh bien, c'est compréhensible.
Je n'utilise pas du tout les fonctions de chaîne. Je les convertis immédiatement en un tableau de caractères à l'aide de la fonction StringToCharArray, puis je travaille avec ce tableau. Je l'ai trouvé beaucoup plus efficace.

Très probablement, sous mql string il y a short[] ou wchar_t[] ou wchar_t*.
Après tout, les chaînes mql sont en Unicode, alors que utf est de 2 octets.
Et StringToCharArray convertit les short[] en char[].

 
Roman:

Et très probablement sous mql string il y a short[]
Après tout, il y a 2 octets dans une chaîne de caractères en Unicode dans mql.
Et StringToCharArray convertit les short[] en char[].

non, j'aurais remarqué. Bien que je n'exclue pas que dans certains cas (en travaillant avec Unicode) cela soit possible. En Java, par exemple, le type char est de 2 octets.
J'ai essayé d'analyser les données de la crypto-monnaie en deux variantes : via cette bibliothèque JSON et en travaillant avec un tableau de caractères.
La différence s'est avérée être 700( !!!) fois plus rapide. J'étais choqué. Peut-être était-ce loin d'être la meilleure implémentation de JSON.