Estou usando um int
tipo para armazenar um valor. Pela semântica do programa, o valor sempre varia em um intervalo muito pequeno (0 - 36) e int
(não a char
) é usado apenas devido à eficiência da CPU.
Parece que muitas otimizações aritméticas especiais podem ser executadas em um intervalo tão pequeno de números inteiros. Muitas chamadas de função nesses números inteiros podem ser otimizadas em um pequeno conjunto de operações "mágicas", e algumas funções podem até ser otimizadas em consultas de tabela.
Portanto, é possível dizer ao compilador que isso int
está sempre nesse pequeno intervalo e é possível que o compilador faça essas otimizações?
unsigned
tipos, pois são mais fáceis de raciocinar com o compilador.
var value: 0..36;
.
int
e também unsigned int
precisa ser estendido por zero ou zero de 32 para 64 bits, na maioria dos sistemas com ponteiros de 64 bits. Observe que no x86-64, as operações nos registradores de 32 bits estendem de zero a 64 bits gratuitamente (sem estender sinal, mas o estouro assinado é um comportamento indefinido, portanto, o compilador pode usar apenas matemática assinada de 64 bits, se desejar). Portanto, você vê apenas instruções extras para estender zero argumentos de função de 32 bits, não resultados da computação. Você faria para tipos não assinados mais estreitos.