VLA)とは、コンパイル時ではなく実行時に長さが決定される自動記憶期間(英語版)の配列データ構造である[1]。68(行は固定)、APL、C99(ただしC11ではサポート必須ではなくオプションに格下げとなった[2][3]。Delphiで使用される言語)でも対応している。脚注メモリ[編集]割り当て[編集]VLAによって、基本的なメモリ割り当ての問題がユーザーに対して隠蔽される。ヒープ領域とスタック領域の間に明確な区別がある環境では、VLAがどちらのメモリ領域に格納されるかは、ユーザーにはわからない[4]。Cコンパイラは、スタック上にVLAのメモリを割り当てる[5]。Cの他のオブジェクトと同様、VLAはSIZE_MAXバイトに制限されている[6]。変数アクセス[編集]いくつかのプログラミング言語では、ポインタを介してVLAにアクセスすることができるが、不完全な型と見なされるため、デリファレンス(間接参照)されるとサイズを取得できなくなる[7]。例[編集]次のC99の関数は、指定されたサイズの可変長配列を割り当て、浮動小数点の値で埋めて、別の関数に渡す。戻るとその存続期間が終了する。vals);}C99では、関数呼び出しにおける長さのパラメータは、可変長配列のパラメータよりも前に来なければならない[1]。以下はAdaにおける同じ例である。Adaの配列は境界を持っている。従って、長さをProcess関数に渡す必要はない。90の機能を利用する場合)。90以前の呼び出しインターフェイスを使用する場合は、まず(外部)関数を宣言し、配列の長さを引数として明示的に渡す必要がある(Cの場合と同様)。read_and_process次のCOBOLのコード断片は、PEOPLE-CNT値で指定された長さ(メンバー数)を持つレコードの可変長配列DEPT-PERSONを宣言する。PACKED-DECIMAL.次のC#のコード断片は、整数型の可変長配列を宣言する。とマークされることを必要とする[8]。Frameworkなどの言語は、可変長配列を提供するとはみなされない。これらの言語では、全ての配列オブジェクトは論理的にヒープに割り当てられ、配列に関して自動記憶期間というものを持たないためである(JavaとdotNetのコンパイラは、これらのヒープ割り当てを可能な限りスタック上に実際に配置するよう最適化できる)。2017年9月21日閲覧。2017年9月21日閲覧。2017年9月21日閲覧。2017年9月21日閲覧。2017年9月21日閲覧。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。