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

时间:2018-07-04 17:04:39

标签: c stdint cstdint

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

typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;

我有一个64位系统,所以long int占用64位。为什么将这三种数据类型都定义为long int类型?我了解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位数据类型真的更快吗?

1 个答案:

答案 0 :(得分:5)

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

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

  

1 以下每种类型都指定一个整数类型,该整数类型通常在具有   至少是指定的宽度。

     

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

相关问题