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