Я використовую int
тип для зберігання значення. За семантикою програми значення завжди змінюється в дуже малому діапазоні (0 - 36), а int
(не а char
) використовується лише через ефективність процесора.
Схоже, багато спеціальних арифметичних оптимізацій можна виконати на такому невеликому діапазоні цілих чисел. Багато викликів функцій цих цілих чисел можуть бути оптимізовані під невеликий набір "магічних" операцій, а деякі функції можуть бути навіть оптимізовані під огляди таблиці.
Отже, чи можна сказати компілятору, що це int
завжди в тому невеликому діапазоні, і чи можна компілятору робити ці оптимізації?
unsigned
типів, оскільки їх компілятору легше міркувати.
var value: 0..36;
.
int
і unsigned int
для більшості систем з 64-бітовими вказівниками теж потрібно розширити знаки або нулі з 32 до 64 біт. Зауважте, що на x86-64 операції з 32-бітовими регістрами беруть нульове розширення до 64-бітового безкоштовно (не підписуйте розширення, але підписане переповнення - невизначене поведінка, тому компілятор може просто використовувати 64-бітну математику, підписану, якщо він хоче). Таким чином, ви бачите лише додаткові інструкції щодо нульового розширення 32-бітових аргументів функції, а не результати обчислення. Ви б для більш вузьких непідписаних типів.