J'utilise un int
type pour stocker une valeur. Selon la sémantique du programme, la valeur varie toujours dans une très petite plage (0 - 36), et int
(pas a char
) n'est utilisée qu'en raison de l'efficacité du processeur.
Il semble que de nombreuses optimisations arithmétiques spéciales puissent être effectuées sur une si petite plage d'entiers. De nombreux appels de fonction sur ces nombres entiers peuvent être optimisés en un petit ensemble d'opérations «magiques», et certaines fonctions peuvent même être optimisées dans des recherches de table.
Alors, est-il possible de dire au compilateur que int
c'est toujours dans cette petite plage, et est-il possible pour le compilateur de faire ces optimisations?
unsigned
types car ils sont plus faciles à raisonner pour le compilateur.
var value: 0..36;
.
int
et unsigned int
doivent également être étendus de 32 à 64 bits sur la plupart des systèmes avec des pointeurs 64 bits. Notez que sur x86-64, les opérations sur les registres 32 bits s'étendent de zéro à 64 bits gratuitement (pas d'extension de signe, mais le débordement signé est un comportement non défini, de sorte que le compilateur peut simplement utiliser des mathématiques signées 64 bits s'il le souhaite). Ainsi, vous ne voyez que des instructions supplémentaires pour étendre les arguments de fonction 32 bits à zéro, pas les résultats du calcul. Vous le feriez pour des types non signés plus étroits.