Почему в 64-битной системе int_fast16_t 64 бит?
Я заглянул внутрь заголовочного файла <stdint.h>
на моей реализации. Я вижу следующее:
typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
У меня 64-битная система, поэтому long int занимает 64 бита. Почему все три типа данных определены как длинные целые? Я понимаю случай int_fast64_t, который является 64-битным. Но почему 16- и 32-битные типы данных имеют 64-битные? Это какая-то ошибка? Я создал небольшую программу, чтобы проверить, так ли это:
sizeof(int_fast8_t) : 1
sizeof(int_fast16_t) : 8
sizeof(int_fast32_t) : 8
sizeof(int_fast64_t) : 8
Определены ли размеры реализации этих типов данных? Какие особенности или характеристики определяют тип данных как "быстрый"? Скорость загрузки данных из ОЗУ в ЦП? Если int_fast16_t
а также int_fast32_t
ширина 8 байтов, каковы преимущества в производительности? Действительно ли быстрее получить доступ к 64-битному типу данных в 64-битной системе?
1 ответ
Эти типы не являются фиксированным размером. Это тип, который по меньшей мере имеет заданный размер и будет наиболее быстрым.
Эти типы определены в разделе 7.20.1.3 стандарта C:
1 Каждый из следующих типов обозначает целочисленный тип, с которым обычно быстрее всего работать среди всех целочисленных типов, которые имеют по меньшей мере указанную ширину.
2 Имя typedef int_fast N _t обозначает самый быстрый целочисленный тип со знаком и шириной не менее N. Имя typedef uint_fast N _t обозначает самый быстрый целочисленный тип без знака с шириной не менее N.