Почему в 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.

Другие вопросы по тегам