変数、オブジェクト、配列の、可視性と存続期間
変数、オブジェクト、配列の記憶域クラスは、いつ、どこにメモリを割り当てるか、そして、いつそのメモリを無効にするかを、決定します。
FreeBASIC に、2つの記憶域クラスがあります:
自動 と
静的
自動
自動 の、変数、オブジェクト、配列の寿命は、宣言の時点で始まって、それらが宣言された範囲から出るとき、終わります。
自動 の、実体は、それらが宣言されたブロックの、各インスタンスのために、固有の記憶域を持つことを保証されます。
例えば、手続きの中で宣言された
自動 の変数は、異なったアドレスに割り当てられて、
手続きで、各々の呼び出しのために、固有の状態(値)を持っています。
自動 の、変数、オブジェクト、配列は、
Shared 指定子を持たない、
Dim、
Redim、
Var キーワードを使って、定義されます。
自動 の、変数、オブジェクト、配列のための記憶域は、プログラム・スタックの上に、割り当てられます。
自動 の、変数、オブジェクト、および配列には、リンケージが全くありません。
静的
静的 な、変数、オブジェクト、配列の、存続期間は、プログラム作成で始まって、プログラム終了処理で終わります。
静的 な実体は、それらが宣言されるブロックの、各インスタンスのために、同じ記憶域を持つことを、保証されます。
例えば、手続きの中で宣言された
静的 な変数は、手続きへの各呼び出しを通して、同じアドレスに割り当てられて、それらの状態(値)を保有します。
静的 な、変数、オブジェクト、配列は、
Static キーワードを使って、宣言されます。
Shared 指定子を使って宣言された実体は、黙示的に、
static です。
Shared 指定子を使って宣言された手続きの中で宣言された、すべての実体も、また、黙示的に
static です。
静的 な、変数、オブジェクト、配列のためのメモリは、定義されるとき初期化されるなら、実行ファイルの
.BSS 部に割り当てられるか、または、
.DATA 部に割り当てられます。
静的 な、可変長配列は、空の添字範囲リストで、空と宣言しなければなりません。
それらの要素データは、リサイズされるとき、まだ自由な貯蔵部に割り当てられています。しかし、内部の配列データは、要素データが、プログラム実行の間を通して持続できる、実行ファイルの
.DATA 部に、割り当てられます。
静的 な、変数、オブジェクト、配列は、前もって、
Extern か
Common キーワードを使って宣言されないかぎり、デフォルトで内部結合を持っています。
プラットホーム差:
-
DOS と Windows プラットホームでは、プログラム・スタックのサイズは、コンパイル時に -t command-line switch を使って調整できます。
リナックス・プラットホームでは、プログラム・スタックのサイズは、ロード時に、/etc/security/limits.conf を変更するか、または、per-thread basis で、シェルの作り付け ulimit を使って、調整できます。
QBからの違い:
-
QuickBASIC は、静的 な実体が、手続きの中と、DEF FN ルーチンの中だけで、宣言できます。
参照: