【发布时间】:2019-03-16 02:08:22
【问题描述】:
根据C_data_types 上的维基百科文章,有一部分提到了任何数据类型都可以是 64 位的:
整数类型的实际大小因实现而异。该标准仅要求数据类型之间的大小关系以及每种数据类型的最小大小:
关系要求是long long不小于long,long不小于int,不小于short。由于 char 的大小始终是支持的最小数据类型,因此没有其他数据类型(位域除外)可以更小。
char 的最小大小为 8 位,short 和 int 的最小大小为 16 位,long 为 32 位,long long 必须至少包含 64 位。
int 类型应该是目标处理器最有效地使用的整数类型。 这提供了很大的灵活性:例如,所有类型都可以是 64 位。然而,几种不同的整数宽度方案(数据模型)很流行。因为数据模型定义了不同程序的通信方式,所以在给定的操作系统应用程序接口中使用统一的数据模型。[8]
然而,当我在大多数机器上用 C 编码时,我确实观察到了清晰的数据类型大小。本文是否只是说存在一个统一的数据模型(由大多数操作系统强制执行),该模型强制数据类型的大小以允许跨程序/机器轻松通信?
【问题讨论】:
-
那是因为 36 位和 60 位字的有趣机器不再广泛使用。一切都是无聊的 8、16、32、64,……位。时间是机器使用 16 位的
int;仍然很少有人这样做(无论如何,在嵌入式空间的低端之外)。许多机器中也没有任何 64 位类型。 -
从某种意义上说,用户社区通过比允许的更严格的 C 强制执行“统一数据模型” - 规范。例子。当
char/unsigned char/signed char范围不是int/unsigned的较小范围时,在C 中是允许的,所有地狱都以fgetc()爆发。 C 允许INT_MAX == UINT_MAX,但这会破坏许多假定INT_MAX == UINT_MAX/2的代码。