为什么64位系统上的int_fast16_t为64位?

Gal*_*axy -2 c cstdint stdint

我查看了<stdint.h>我的实现中的头文件.我看到以下内容:

typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
Run Code Online (Sandbox Code Playgroud)

我有一个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
Run Code Online (Sandbox Code Playgroud)

是否定义了这些数据类型的大小?哪些特征或特征将数据类型定义为"快速"?是数据块从RAM加载到CPU的速度吗?如果int_fast16_tint_fast32_t是8字节宽,性能有哪些好处?在64位系统上访问64位数据类型真的更快吗?

dbu*_*ush 5

这些类型不是固定大小.它们至少是给定大小的类型,往往是最快的.

这些类型在C标准的第7.20.1.3节中定义:

1以下每种类型都指定一个整数类型,该类型通常在具有至少指定宽度的所有整数类型中运行最快.

2 typedef名称int_fast N _t指定宽度至少为N的最快有符号整数类型.typedef名称 uint_fast N _t指定宽度至少为N的最快无符号整数类型.