Почему int_fast16_t 64 бит в 64-битной системе? - PullRequest
0 голосов
/ 04 июля 2018

Я заглянул внутрь файла заголовка <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 Ответ

0 голосов
/ 04 июля 2018

Эти типы не фиксированного размера. Это тип, который по крайней мере заданного размера, который, как правило, будет самым быстрым.

Эти типы определены в разделе 7.20.1.3 стандарта C:

1 Каждый из следующих типов обозначает целочисленный тип, с которым обычно быстрее всего работать среди всех целочисленных типов, имеющих минимальная указанная ширина.

2 Имя typedef int_fast N _t обозначает самый быстрый целочисленный тип со знаком с шириной не менее N . Имя typedef uint_fast N _t обозначает самый быстрый целочисленный тип без знака с ширина не менее N .

...