字与字节序
字(Word)
字是CPU中ALU(算术逻辑单元)一次能够并行处理的数据位数,也是CPU内部数据通路的标准宽度。
- 计算机被称为”XX位”指的就是字长,如32位机、64位机
- 字长决定了CPU一次能处理的数据量,也决定了虚拟地址空间的寻址范围
- 32位机:最大寻址空间 2^32 = 4GB
- 64位机:最大寻址空间 2^64 = 16EB(实际受硬件限制远小于此)
- 字长同时决定了指针的大小:32位机器上指针占4字节,64位机器上指针占8字节
字节序(Endianness)
字节序描述了多字节数据在内存中的存储顺序。考虑一个32位整数 0x01234567,其高位字节为 0x01,低位字节为 0x67。
小端序(Little Endian)
低位字节存储在低地址处。
地址 +0: 0x67
地址 +1: 0x45
地址 +2: 0x23
地址 +3: 0x01
- x86/x86-64 架构使用小端序
- 特点:强制类型转换时,低地址处的字节就是原数据的最低有效字节,便于某些算术运算
大端序(Big Endian)
高位字节存储在低地址处。
地址 +0: 0x01
地址 +1: 0x23
地址 +2: 0x45
地址 +3: 0x67
- 网络协议(TCP/IP)使用大端序,因此也称为网络字节序(Network Byte Order)
- 某些嵌入式处理器(如早期的PowerPC、SPARC、Motorola 68K)使用大端序
- 特点:人类阅读内存dump时更直观,因为与书写顺序一致
字节序的重要性
- 跨网络通信时,发送方和接收方必须约定字节序(通常使用网络字节序/大端序)
- 序列化/反序列化二进制数据时必须明确字节序
- 数据在不同架构的机器间迁移时需要考虑字节序转换