Características del lenguaje mql5, sutilezas y técnicas - página 162

 
Nikolai Semko:


para las estructuras y clases que incluyen cadenas o matrices dinámicas o referencias a clases, sizeof() apuntará al cielo.

y puedo entenderlo :-)

 
Nikolai Semko:


El tipo de cadena en mql es muy complicado, y no se revela completamente en la documentación.
Pero se puede adivinar desde el lenguaje C, que el array char (buffer) está envuelto en el tipo string
Y entonces empiezas a bailar entendiendo cómo funciona ))

 
Roman:

El tipo de cadena en mql es muy complicado, y no se revela completamente en la documentación.
Pero el lenguaje C sugiere que el tipo de cadena es una matriz char (buffer)
Y entonces empiezas a bailar entendiendo cómo funciona ))

No hay cadenas en C.

 
Maxim Kuznetsov:

para las estructuras y clases que incluyen cadenas o matrices dinámicas o referencias a clases, sizeof() señalará con el dedo el cielo.

y puedo entenderlo :-)

¿Pero por qué?
Con cualquier array dinámico mostrará el tamaño del objeto array dinámico, que es de 52 bytes en MQL5


 
Nikolai Semko:

No hay tangas en C.

Creo que ya lo hay, pero esa no es la cuestión.
Sí, C tiene char[], está envuelto en mql string

 
Nikolai Semko:

¿Pero por qué?
Con cualquier array dinámico mostrará el tamaño del objeto array dinámico, que es de 52 bytes en MQL5

¿el tamaño de qué y para quién se mostrará?

52 bytes es su dispositivo interno solamente.

No está claro por qué no es de 64, podrían haberse alineado :-)

 
Roman:

Creo que ya lo hay, pero esa no es la cuestión.
Sí, C tiene char[], está envuelto en mql string

Bueno, lo entiendo.
No utilizo en absoluto las funciones de cadena. Inmediatamente los convierto en una matriz de caracteres utilizando la función StringToCharArray y luego trabajo con la matriz. He comprobado que es mucho más eficiente.

Especialmente cuando se trata de analizar.

 
Maxim Kuznetsov:

¿el tamaño de qué y para quién se mostrará?

52 bytes es sólo su estructura interna.

No está claro por qué no es de 64, podrían haberlo alineado :-)

Probablemente algún tipo de estructura con diferentes tipos. Por ejemplo, 5 ulong y 3 uint. Tal vez el tiempo está presente para el procesamiento interno y la hora del último acceso. NO LO SÉ. Quién sabe lo que puede contener esta estructura.

 
Nikolai Semko:

Bueno, eso es comprensible.
No uso las funciones de cadena en absoluto. Inmediatamente los convierto en un array de caracteres utilizando la función StringToCharArray y luego trabajo con el array. He comprobado que es mucho más eficiente.

Lo más probable es que la cadena mql sea short[] o wchar_t[] o wchar_t*.
Al fin y al cabo, las cadenas mql están en Unicode, mientras que utf tiene 2 bytes.
Y StringToCharArray convierte de short[] a char[].

 
Roman:

Y lo más probable es que bajo mql string haya short[]
Después de todo, hay 2 bytes en la cadena en Unicode en mql.
Y StringToCharArray convierte de short[] a char[]

no me habría dado cuenta. Aunque no excluyo que en algunos casos (cuando se trabaja con Unicode) sea posible. En Java, por ejemplo, el tipo char es de 2 bytes.
Intenté parsear los datos de crypto-exchange en dos variantes: a través de esta librería JSON y a través del trabajo con char array.
La diferencia resultó ser 700(!!) veces por velocidad. Me sorprendió. Quizás esté lejos de ser la mejor implementación de JSON.