一、多字节对象的存储方式。
对于跨越多字节的程序对象,我们可以建立两个规则:
① 这个对象的地址是什么?
② 在内存中如何排列对象的这些字节?
在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。
例子:
假设一个类型为 int 的变量 x 的地址为 0x100,也就是说,地址表达式 &x 的值为 0x100。那么,(假设数据类型 int 为32位表示)x 的 4 个字节将被存储在内存的 0x100、0x101、0x102 和 0x103 位置。
二、两种通用规则——大/小端法
排列表示一个对象的字节有两个通用的规则。
考虑一个 w 位的整数,其位表示为 [ xw-1, xw-2, ……, x1, x0 ],其中 xw-1 是最高有效位,而 x0 是最低有效位。
假设 w 是 8 的倍数,这些位就能被分组成为字节,其中最高有效字节包含位 [ xw-1, xw-2, ……, xw-8 ],而最低有效位字节包含位 [ x7, x6, ……, x0 ],其它字节包含中间位。
某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,而林一些机器则按照从最高有效字节到最低有效字节的顺序存储。前一种规则——最低有效字节在最前面的方式,称为小端法。后一种规则——最高有效字节在最前面的方式,称为大端法
例子
假设变量 x 的类型为 int,位于地址 0x100 处,他的十六进制值为 0x01234567。地址范围 0x100 ~ 0x103 的字节顺序依赖于机器的类型:
注意:在字 0x01234567 中,高位字节的十六进制值为 0x01,而低位字节值为 0x67。