[uquote="ARV",url="/forum/viewtopic.php?p=3269590#p3269590"]для чего он введен?[/uquote]
процессоры (и память/конвееры/предсказатели/черти рогатые) могут по-разному работать с переменными разного размера. К примеру, x86 обыкновенно работает с 32-битными числами в целом быстрее, чем с восьмибитными; 16 бит - самые медленные. На amd64 64-битные еще чуть быстрее 32-битных. Если скучно, можете потестировать
определения из gcc с линуксовым libc, x86-64:
Код: Выделить всё
arkhnchul@arkhost-scow:~$ gcc -E -dM -x c /dev/null | grep -E "INT_FAST[0-9]+_TYPE" | sort
#define __INT_FAST16_TYPE__ long int
#define __INT_FAST32_TYPE__ long int
#define __INT_FAST64_TYPE__ long int
#define __INT_FAST8_TYPE__ signed char
#define __UINT_FAST16_TYPE__ long unsigned int
#define __UINT_FAST32_TYPE__ long unsigned int
#define __UINT_FAST64_TYPE__ long unsigned int
#define __UINT_FAST8_TYPE__ unsigned char
там же, но 32 bit ABI:
Код: Выделить всё
arkhnchul@arkhost-scow:~$ gcc -m32 -E -dM -x c /dev/null | grep -E "INT_FAST[0-9]+_TYPE" | sort
#define __INT_FAST16_TYPE__ int
#define __INT_FAST32_TYPE__ int
#define __INT_FAST64_TYPE__ long long int
#define __INT_FAST8_TYPE__ signed char
#define __UINT_FAST16_TYPE__ unsigned int
#define __UINT_FAST32_TYPE__ unsigned int
#define __UINT_FAST64_TYPE__ long long unsigned int
#define __UINT_FAST8_TYPE__ unsigned char
[uquote="ARV",url="/forum/viewtopic.php?p=3269590#p3269590"]я так полагаю, что для тех платформ, где есть разные storage classes, с разным временем доступа, компилятор должен стремиться (очевидно, в зависимости от параметров оптимизации?) подбирать для переменных этих типов наиболее быстрый класс хранения[/uquote]
еще раз - нет, это только тип. Storage class - отдельная сущность.
[uquote="ARV",url="/forum/viewtopic.php?p=3269590#p3269590"]ведь auto - это значит "на усмотрение компилятора"[/uquote]
да, и компилятор стремится запихать
любой тип в самую быструю память, какая у него есть.
Oxford писал(а):register это специфичная для компилятора функция.
register это стандартный спецификатор, его обязаны понимать (не выполнять) все компиляторы.