Używam int
typu do przechowywania wartości. Zgodnie z semantyką programu, wartość zawsze zmienia się w bardzo małym zakresie (0 - 36) i int
(nie a char
) jest używana tylko ze względu na wydajność procesora.
Wygląda na to, że na tak małym zakresie liczb całkowitych można przeprowadzić wiele specjalnych optymalizacji arytmetycznych. Wiele wywołań funkcji na tych liczbach całkowitych może zostać zoptymalizowanych do postaci małego zestawu operacji „magicznych”, a niektóre funkcje mogą być nawet zoptymalizowane pod kątem przeszukiwania tabel.
Czy można więc powiedzieć kompilatorowi, że int
jest to zawsze w tak małym zakresie i czy kompilator może wykonać te optymalizacje?
unsigned
typów, ponieważ są one łatwiejsze do zrozumienia dla kompilatora.
var value: 0..36;
.
int
i unsigned int
trzeba być steru- lub zerowej wydłużony z 32 do 64-bit, też w większości systemów z 64-bitowych wskaźników. Zauważ, że na x86-64 operacje na rejestrach 32-bitowych rozszerzają się zera do 64-bitów za darmo (nie rozszerzanie znaku, ale przepełnienie znaku jest niezdefiniowanym zachowaniem, więc kompilator może po prostu użyć 64-bitowej matematyki ze znakiem, jeśli chce). Widzisz więc tylko dodatkowe instrukcje do 32-bitowych argumentów funkcji rozszerzających o zero, a nie wyniki obliczeń. Byłbyś dla węższych, niepodpisanych typów.