mql5言語の特徴、微妙なニュアンスとテクニック - ページ 162

 
Nikolai Semko:


文字列や動的配列、クラス参照を含む構造体やクラスでは、sizeof() は空に向かって指をさすことになります。

と理解することができます :-)

 
Nikolai Semko:


mqlの文字列型は非常に複雑で、ドキュメントでも十分に開示されていません。
しかし、C言語から推測すると、char配列(バッファ)は文字列型にラップされています。
そして、その仕組みを理解しながら踊り始めるのです ))

 
Roman:

mqlの文字列型は非常にトリッキーで、ドキュメントでも十分に開示されていません。
しかし、C言語では文字列の型はchar配列(バッファ)であることが示唆されている
そして、その仕組みを理解しながら踊り始めるのです ))

C言語には文字列はありません。

 
Maxim Kuznetsov:

文字列や動的配列、クラス参照を含む構造体やクラスでは、sizeof() は空に向かって指をさすことになります。

と理解することができます :-)

でも、なぜ?
動的配列の場合、動的配列オブジェクトのサイズが表示されます。


 
Nikolai Semko:

CにはTバックはありません。

すでにあると思いますが、そういう問題ではありません。
はい、C言語にはchar[]があり、それはmqlの文字列でラップされています。

 
Nikolai Semko:

でも、なぜ?
動的配列の場合、動的配列オブジェクトのサイズが表示されます。

誰のための、何のための、どのような大きさなのか?

52バイトは、その内部デバイスのみ。

なぜ64でないのかは不明ですが、アライメントをとったのかもしれません :-)

 
Roman:

すでにあると思いますが、そういう問題ではありません。
はい、C言語にはchar[]があり、それはmqlの文字列でラップされています。

まあ、それはわかるんですけどね。
文字列関数は 全く使っていません。早速、StringToCharArray関数でchar配列に変換して、その配列で作業しています。より効率的であることを実感しています。

特に構文解析に関しては。

 
Maxim Kuznetsov:

誰のための、何のための、どのような大きさなのか?

52バイトはその内部構造だけです。

なぜ64でないのかは不明ですが、整列させた可能性もありますね :-)

おそらく、種類が異なる何らかの構造になっているのでしょう。例えば、5つのulongと3つのuintです。内部処理と最終アクセス時刻のために時間が存在するのかもしれない。わからない。この構造体に何が入っているかは、誰にもわからない。

 
Nikolai Semko:

まあ、それは理解できる。
文字列関数は 全く使っていません。早速、StringToCharArray関数でchar配列に変換して、その配列で作業しています。より効率的であることを実感しています。

ほとんどの場合、mqlの文字列はshort[]またはwchar_t[]またはwchar_t*です。
何しろ、mqlの文字列はユニコードで、utfは2バイトですからね。
また、StringToCharArrayはshort[]からchar[]に変換する。

 
Roman:

そして、ほとんどの場合、mqlの文字列の下にshort[]があります。
結局、mqlのUnicodeでは、文字列は2バイトです。
また、StringToCharArrayは、short[]からchar[]に変換します。

いいえ、私は気づかなかったでしょう。場合によっては(Unicodeで作業する場合)可能であることを否定はしませんが。例えば、Javaではchar型は2バイトです。
私は、このJSON ライブラリを使用する方法と、char arrayを使用する方法の2つの方法で、crypto-exchangeからのデータをパースしようと試みました。
その差は、速度にして700倍(!!)にもなることが判明した。ショックでした。おそらく、最高のJSON実装とは程遠いものだったのでしょう。

理由: