Delphi 言語の最適化
1) レコード型または配列型の戻り値
C++ プログラマは、戻り値がスタックにプッシュされるため、これを実行しません。その結果、時間とスペースの両方が効率的になります。 Delphi にはこの問題はありません。戻り値は Out パラメータと同等であり、呼び出し元はメモリ ユニット ポインタを渡します。したがって、レコードまたは配列の戻り値を使用して、式を記述する際の可読性と利便性を高めることができます。
2) 公的表現
Delphi はステートメント行内の一般的な式のみを抽出します。共通式に関数呼び出しまたはプロパティ アクセスが含まれている場合、抽出によってセマンティクスが変更される可能性があるため、抽出されません。つまり、2 回評価されます。
3) 定数パラメータ
関数のパラメーターが変更されていない場合、パラメーターの長さが 4 バイトを超える場合、またはインターフェイス、文字列、または動的配列型の場合、const パラメーターを使用すると、コンパイラーは参照テクノロジを変更せずにアドレス モードでパラメーターを渡すことができます。
4) 緊縮財政
Delphi は、ストレージ ユニットを割り当てるときに、できるだけ小さいスペースを割り当てます。小さくてレジスタに収まる場合は、レジスタを直接操作するのが一般的です。たとえば、長さが 4 バイトのレコードまたはデータを割り当てる場合、コンパイラは DWord に従って自動的に 32 ビット レジスタを使用します。
5) オペレーター
2または4で割る場合は右シフトに、2または4で乗算する場合は左シフトに最適化されるため、特にシフト演算を使用する必要がなく、より読みやすいコードを書くことができます。ただし、8 による乗算と除算、およびその他の 2 の倍数には、この最適化は適用されません。
i := i + 1; と Inc(i); は通常、同じコードを生成します。
6) 浮動小数点
Delphi は浮動小数点計算を最適化せず、ゼロ演算を追加しても最適化されず、多くの FWAIT 命令が追加されます。したがって、主要な浮動小数点演算を作成する場合は、式を自分で最適化し、パブリック式を自分で抽出する必要があります。浮動小数点変数は最適化されず、後で使用されない場合でもメモリに書き戻されるため、中間変数はできるだけ使用しないでください。必要に応じてアセンブリを使用するか、C の使用を検討してください。それにもかかわらず、一般に、同等の Delphi プログラムと C 浮動小数点プログラムの間には、パフォーマンスに大きな違いはありません。
7) ステートメント付き
を使用すると、計算の繰り返しを避けるために暗黙的な中間変数を生成できます
8) コレクション
[0..31] の i は (i >= 0) および (i <= 31) より高速です
9) ビット幅
圧縮を使用しない場合は、整数と基数を使用します。これは、バイトが整列されるときに、SmallInt、ShortInt、Byte なども 4 バイトまたは 8 バイトを占有するためです。計算ではまだ 32 ビットであるため、最初に 32 ビットに拡張する必要があります。