プログラムが動作しているmql仮想マシンのゴミ箱で管理されているデータ。これには、クラスのインスタンスも含まれます。この型のオブジェクトへのポインタは POINTER_AUTOMATIC になる。このようなオブジェクト自体は、この仮想マシンのヒープにあるか、プライベートセクションにあるかのどちらかです。正確な方法は、データとそのサイズ、そして開発者が持っているものに依存するようです。この情報は入手できません。このようなデータには、例えばユーザークラスが含まれる。ポインタを持たないクラスインスタンスの定義は、このストレージタイプを定義します。例えば、CFoo bar は bar クラス CFoo のインスタンスを定義し、そのポインタは解放する必要がない。仮想マシンは、リリースのすべての操作を実行します。delete演算子を使う必要がないため、オブジェクトが漏れるという問題に直面します。
スタックに配置されたデータ。これらは、まず、関数のローカル変数である。つまり、何らかの関数内でint a = 5と書くと、スタックの先頭が4バイト上に移動し、必要なメモリサイズが確保されるのです。おそらく、MQLではスタックに格納される型は構造体も含むのでしょう(正直なところ、確認したことはありません)。このようなデータはあまり場所を取らず、ネストした関数の呼び出しの連鎖を考慮しても、スタック全体としてはヒープよりはるかに少ないメモリしか必要としない。このタイプのストレージは自動的に使用されるので、考える必要はありません。
OKです。理解できない。わかりましたか?本当に理解しているのか?その通り?
この議論は、次のような発言に集約される。
...
それは一般論ではなく、一つの記事に関する状況についてであり、何が問題なのかを説明したのです。なるほど、大惨事はなかった。
宣言された配列double x[268435448];
OnStart()関数 内にも同じ配列が存在する。
また、LONG_MAXの深さで再帰的に呼び出すようにした。
問題ありません。
静的配列を使用しないのですか?
配列のサイズが小さく、一定で、事前に分かっている場合は、静的の方が良く、おそらく速いでしょう。
配列のサイズが小さく、一定で、事前に分かっている場合は、静的の方が良く、おそらく速いでしょう。
スタティック変数/配列の一覧とそのサイズを取得する方法が欲しいです。おそらく、ここで 行われているようなコードパーサーが必要なのでしょう。
静的な文字列配列とダブル配列は全く別物なんでしょうね。
静的な文字列配列とダブル配列は全く別物なんでしょうね。
文字列は基本的にポインタと int サイズで構成される内部クラスであり,例えば double 配列の場合,条件付きで 1.5 倍の容量を占めることになる
何百万もの要素を持つ静的配列でもない限り、わざわざやる意味はあまりないと思うのですが。
静的配列を使用しない?
つまり、MQLには基本的に4種類のデータが存在するのです。
スタックを関数とそのローカル変数に任せると、3つの型を扱うことになる。個人的には(あくまで私見ですが)、自動寿命で定義されたデータは、前の2つのタイプの長所をうまく組み合わせて、短所をなくしていると考えています。自動ポインターで定義されたデータは、静的なデータと同様に予測可能で安全でありながら、動的な手動制御のデータと同様に柔軟である。予測可能というのは、ポインタービットのチェックを追加で行う必要がなく、前に誰かがデータを削除してしまったのではないかと思うようなシナリオのことを指します。柔軟性とは、自動ポインタによって参照されるデータを、通常のポインタと同様に、関数に渡したり、配列の場合は再利用したりして扱うことができるシナリオのことである。
今言ったことを説明するために、Ihor Heraskoが提供した最初のコードと、私がPOINTER_AUTOMATIC用に書いた同じコードを比較してみてください。余分なチェックや初期化もなく、オペレーターの削除も60,000,000回ありません。これにより、時間、労力、そして重要な資源を節約することができます。これを理解すれば、ポインターを扱う必要はほとんどない。この作業を最小化するか、全く残らないようなアルゴリズムをいつでも書くことができるのです。例えば、私は自分のコードでオブジェクトを手動で処理することはありません。静的配列については、例えば、プログラムに必要なデータを縫い込むために使わなければならないこともありますが、それはとても特殊なことで、普通のユーザーは必要ないと思います。CArrayObjのような既成のコレクションを使うか、自作するのがベストです。今はテンプレートとMQLの機能で、静的な配列よりもかなり柔軟なものを作ることができます。
Vasiliy Sokolov #:
静的な定義済みのデータ。コンパイル時にプログラムに縫い込まれ、もはや修正されることはない。こ れらは、あるプライベートなメモリ領域に格納されています。例えば、char[1024]のような静的配列である。
配列が初期化されていない場合。
なぜ、EX5に書き込まなければならないのか?
配列が初期化されていない場合。
なぜ、EX5に縫い込まなければならないのか?
そうなんです、初期化されていないものはもちろん縫い付けられていないんです。初期化されたものはそうです。しかし、どちらのタイプもサイズはコンパイル時に定義され、もう変更されることはない。つまり、静的配列は条件付きで2つのグループに分けることができる。
エムクールにはゴミ回収業者がいません。
公式には、そうです。非公式には、多くのものがその存在を示しています。