Estoy usando un int
tipo para almacenar un valor. Según la semántica del programa, el valor siempre varía en un rango muy pequeño (0 - 36), y int
(no a char
) se usa solo debido a la eficiencia de la CPU.
Parece que se pueden realizar muchas optimizaciones aritméticas especiales en un rango tan pequeño de enteros. Muchas llamadas de función en esos enteros pueden optimizarse en un pequeño conjunto de operaciones "mágicas", y algunas funciones pueden incluso optimizarse en búsquedas de tablas.
Entonces, ¿es posible decirle al compilador que esto int
siempre está en ese rango pequeño, y es posible que el compilador haga esas optimizaciones?
unsigned
tipos, ya que es más fácil para el compilador razonar con ellos.
var value: 0..36;
.
int
y es unsigned int
necesario extender el signo o cero de 32 a 64 bits, también, en la mayoría de los sistemas con punteros de 64 bits. Tenga en cuenta que en x86-64, las operaciones en registros de 32 bits se extienden de cero a 64 bits de forma gratuita (no se extiende la señal, pero el desbordamiento firmado es un comportamiento indefinido, por lo que el compilador solo puede usar matemática firmada de 64 bits si lo desea). Por lo tanto, solo verá instrucciones adicionales para argumentos de función de 32 bits de extensión cero, no resultados de cálculo. Lo haría para tipos sin signo más estrechos.