Sto usando un int
tipo per memorizzare un valore. Dalla semantica del programma, il valore varia sempre in un intervallo molto piccolo (0 - 36) e int
(non a char
) viene utilizzato solo a causa dell'efficienza della CPU.
Sembra che molte ottimizzazioni aritmetiche speciali possano essere eseguite su un così piccolo intervallo di numeri interi. Molte chiamate di funzione su tali numeri interi potrebbero essere ottimizzate in un piccolo insieme di operazioni "magiche" e alcune funzioni potrebbero persino essere ottimizzate nelle ricerche di tabella.
Quindi, è possibile dire al compilatore che questo int
è sempre in quel piccolo intervallo, ed è possibile per il compilatore fare queste ottimizzazioni?
unsigned
tipi poiché sono più facili da ragionare per il compilatore.
var value: 0..36;
.
int
e unsigned int
deve essere esteso anche a segno o zero da 32 a 64 bit, sulla maggior parte dei sistemi con puntatori a 64 bit. Si noti che su x86-64, le operazioni sui registri a 32 bit registrano zero-extension gratuitamente a 64-bit (non l'estensione del segno, ma l'overflow con segno è un comportamento indefinito, quindi il compilatore può usare solo matematica con segno a 64 bit se lo desidera). Quindi vedi solo istruzioni extra per args di funzioni a 32 bit a estensione zero, non risultati di calcolo. Per tipi non firmati più stretti.