VariablesEditを使用して
VariablesEditの可視性と有効期間
変数は、宣言され、使用される方法に応じて、異なる可視性、またはスコープを持つことがで スコープとは、プログラム内の特定の時点で特定の変数の内容にアクセスする機能を指します。
通常、変数のスコープは、その囲むブロックによって決定されます。 ブロックはいくつかの言語(begin/end、{/}のペア)で明示的に囲むことができますが、他の言語ではブロックは暗黙的です。
ほとんどすべての言語には全体的な境界スコープがあり、プログラムがこのスコープ内で変数を宣言する場合、それはグローバル変数と呼ばれます。対照的に、ローカル変数は、そのブロック内でのみ表示されるか、または”スコープ内”にある変数です。
このコードを考えてみましょう:
integer globalVariableglobalVariable = 5begin integer localVariable localVariable = 7 globalVariable = 8endlocalVariable = 3 /* <-- this is a syntax error */
グローバル変数はブロックの外で宣言されているので、(暗黙の)グローバルスコープにあり、グローバル変 ローカル変数はbegin/endブロックで宣言され、そのスコープはそのブロックに制限されます。
変数globalVariableは5として始まり、ブロックに8が割り当てられ、8として終了します。 変数localVariableには7が割り当てられ、不正に3が割り当てられる前に範囲外になります。 このレベルには変数localVariableはありません。
変数の有効期間は、変数がアクティブなときに通知されます。 前の例では、グローバル変数はプログラムの開始時に作成され、有効期間はプログラムの長さに等しくなります。 LocalVariableの場合、block beginsディレクティブの直後まで作成されません。 プログラムがend指令を通過すると、その寿命は終了します。
動的メモリ割り当て編集
多くのプログラムは非常に特定の目的を持っており、メモリのための非常に特定の小さな領域を必要とします。 画像ファイルを読み取るためのプログラムを作成していた場合、画像の大きさが正確にはわかりません。 いくつかはキロバイトまたはより少しであるかもしれないが、いくつかは数百メガバイトである可能性があります。 必要のない数百メガバイトを割り当てると、一部のコンピュータでプログラムを実行するのが難しくなり、メモリが少なすぎると処理できない画像が
この問題に対する良いアプローチは、必要に応じてメモリを割り当てることです。 これは動的メモリ割り当てと呼ばれます。 私たちは、プログラムが実行されている間(コンパイル時ではなく)必要なだけ、それ以上、そしてそれ以下ではありません。 この例では、これにより、巨大な画像ファイルと小さな画像ファイルの両方を効率的かつ効果的な方法で編集できるようになります。 それはもはや割り当ての詳細を扱っている言語ではなく、直接私たちであるため、いくつかの複雑さが追加されています。 この例では、下端のコンピュータで実行している場合、大きな画像ファイルを収容するのに十分なメモリがない可能性があるため、そのような状況で
動的メモリ割り当ては”メモリリーク”の主な原因であり、プログラムはメモリ領域を割り当て、使用し、その後行われますが、再び使用可能であるとマー これらの問題は、他のバグとは異なり、リークが容易に明らかではないので、追跡するのが難しい場合があります。
現代の言語の中には、ガベージコレクションと呼ばれるメモリリークを防止するためのメカニズムが組み込まれています。 このシステムは、スコープ外にあるときに、どこでどの割り当てが使用されているかを追跡します。 ガベージコレクションにはわずかなパフォーマンスの低下がありますが、現在は一般的に進歩と見なされています。 たとえば、JavaとPythonにはガベージコレクタがあります。