-1

我在我的实现中查看了头文件<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

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

4

1 回答 1

5

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

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

1以下每种类型都指定了一个整数类型,该类型通常是所有至少具有指定宽度的整数类型中运算速度最快的类型。

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

于 2018-07-04T17:16:46.450 回答