Я использую int
тип для хранения значения. В соответствии с семантикой программы значение всегда изменяется в очень небольшом диапазоне (0 - 36), и int
(не a char
) используется только из-за эффективности процессора.
Кажется, что многие специальные арифметические оптимизации могут быть выполнены для такого небольшого диапазона целых чисел. Многие вызовы функций для этих целых чисел могут быть оптимизированы в небольшой набор «магических» операций, а некоторые функции могут быть даже оптимизированы для поиска в таблице.
Итак, можно ли сказать компилятору, что int
он всегда находится в этом небольшом диапазоне, и возможно ли, чтобы компилятор выполнял эти оптимизации?
unsigned
типов, поскольку компилятору их легче рассуждать.
var value: 0..36;
.
int
и unsigned int
нужно расширять знак или ноль с 32 до 64 бит, также на большинстве систем с 64-битными указателями. Обратите внимание, что на x86-64 операции с 32-битными регистрами бесплатно расширяются с нуля до 64-битного (не расширение знака, но переполнение со знаком - неопределенное поведение, поэтому компилятор может просто использовать 64-битную математику со знаком, если он хочет). Таким образом, вы видите только дополнительные инструкции для расширенных нулями аргументов 32-битных функций, а не результаты вычислений. Вы бы для более узких типов без знака.