int
タイプを使用して値を格納しています。プログラムのセマンティクスにより、値は常に非常に小さな範囲(0〜36)で変化し、int
(a char
ではなく)はCPUの効率のためにのみ使用されます。
このような小さな範囲の整数に対して、多くの特別な算術最適化を実行できるようです。これらの整数に対する多くの関数呼び出しは、「魔法の」操作の小さなセットに最適化される可能性があり、一部の関数は、テーブルルックアップに最適化されることもあります。
それで、これint
が常にその小さな範囲にあることをコンパイラーに伝えることは可能ですか?そしてコンパイラーがそれらの最適化を行うことは可能ですか?
unsigned
は、コンパイラーが推論するのが簡単なため、型を使用することで多少の利益が得られる可能性があることに注意してください。
var value: 0..36;
。
int
とunsigned int
符号拡張または64ビット・ポインタを持つほとんどのシステム上で、あまりにも、32から64ビットからゼロ拡張する必要があります。x86-64では、32ビットでの操作は無料で64ビットにゼロ拡張を登録します(符号拡張ではありませんが、符号付きオーバーフローは未定義の動作なので、コンパイラーは必要に応じて64ビット符号付き計算を使用できます)。したがって、計算結果ではなく、32ビット関数の引数をゼロ拡張する追加の命令のみが表示されます。あなたはより狭い符号なしタイプのためにでしょう。