Windows操作系统上所有c数据类型的持久性



我正在尝试记录不同的数据类型以及它们是如何存储在C中的内存中的。我知道每个数据类型占用多少字节,但我想知道每种数据类型的endianness是如何的。这是专门针对Windows的。

端序(通常(是硬件的函数,而不是操作系统或语言,因此所有多字节类型都应该具有相同的端序。

强调应该

对于x86和x86_64(Windows主要在其上运行(,所有多字节类型都是小端序。

但总会有一些奇怪的平台。DEC VAX是小端序,但浮点类型除外,它们以大端和小端的组合顺序存储。来自Kapps&斯塔福德1:

VAX的设计部分是为了与PDP-11计算机兼容。PDP-11是一个16位机器,32位和64位浮点数字存储为16位字的序列,最高有效部分位于第一位。这对VAX来说是不幸的,因为VAX几乎普遍将最不显著的部分放在第一位。浮点数字是这个规则的主要例外。因此,当F_floating数存储在长字中时,我们必须将前16位与后16位反转

IOW,每个16位字都是大端序(字节顺序01(,但16位字的序列是小端序,因此32位F_float的字节顺序是2301

至于字体大小。。。

C没有指定";传统的";标量类型,如intlongfloatdouble等。它指定了每个类型必须能够表示的最小值范围。char必须能够表示基本执行字符集中的所有字符,这意味着它必须至少8位宽,但它可能更宽(9位字节和36位字是一种东西,或者至少过去是这样(。int必须能够表示中至少范围-32767..32767的值,这意味着它必须至少16位宽。


  1. Kapps,Charles A.和Robert L.Stafford,VAX汇编语言和体系结构,Prindle,Weber&Schmidt 1985

我知道每种数据类型占用的字节数

这是不可能的。C没有为它的任何类型定义大小。它只提供最低限度。例如,int的大小只需要16位,但它通常会更大。这可能因编译器和操作系统而异。

我想知道每个数据类型的字节序是如何的。

C也没有定义这一点。这将取决于系统的硬件。例如,x86和x86_64是小端序。ARM是big-endian。一些旧系统使用的字节顺序与这两种系统不同。

最新更新