次に示す最適化は,すべての最適化レベル (/optimize:0 ~ /optimize:5) で行われます。
空間の最適化は,不要に使用されているメモリーをなくすことでオブジェクトまたは実行プログラムの大きさを減らし,実行速度とシステム・スループットを改善します。Visual Fortran の空間の最適化には次のものがあります。
1 つの定数値については,1 コピー分のメモリー空間だけが割り付けられます。その定数値がプログラム内の複数の場所で使用されていても,すべての引用がその値を指します。
決して実行されない操作や,決して使用されないデータ項目は,Visual Fortran によって削除されます。不要コードには,到達しないコードや,値の伝播などの他の最適化による結果として使われなくなるコードが含まれます。
最適化レベルにかかわらず,Visual Fortran は算術文関数を,関数として呼び出すのではなく,プログラム中に直接挿入します。これにより,インライン展開されたコードに対して他の最適化を適用できるようになり,また呼び出しと戻り,実引数の格納と取り出しなどのいくつかの操作を削除することができます。次に例を示します。
SUM(A,B) = A+B . . . Y = 3.14 X = SUM(Y,3.0) ! 値の伝播を伴って X = 6.14 になる
多くの組込み手続が自動的にインライン展開されます。
包含されている副プログラムなどのインライン展開は,最適化レベル /optimize:4 または /optimize:5 で起こります (または,/optimize:1 以上で適切な /inline キーワードを指定した場合)。
DO ループの折り畳みは,I/O 処理の大きなオーバーヘッドを軽減します。通常は,I/O 並び中の個々の要素が,Compaq Fortran RTL への呼び出しを個別に生成します。これらの呼び出し処理のオーバーヘッドは,DO 形反復で最も大きくなります。
Visual Fortran は,プログラムの実行中に書式が変わらないと判断できた場合,7 つまで DO 形反復における入れ子中の一連の呼び出しを,最適化された RTL ルーチンへの 1 つの呼び出しに置き換えます (「DO 形反復の折り畳みを有効にする」を参照)。最適化された RTL ルーチンは,1 回の操作でより多くの要素を転送することができます。
Visual Fortran は書式付き I/O 操作と書式なし I/O 操作の両方で DO 形反復を折り畳みますが,要素の転送コストが合計コスト中に占める割合が大きい書式なし I/O での折り畳みの方が重要な意味を持ちます。
いくつかの配列保存操作が最適化されます。たとえば,一時的な配列の作成を最小限に抑えるために,Visual Fortran は配列代入の両辺で重複が起こるかどうかを検出します。この形式の最適化は,FORALL 構文中の一部の代入文に対して行われます。
一部の配列演算は,ループ展開の最適化の候補ともなります (「ループ展開」を参照)。