字与字节序

字(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时更直观,因为与书写顺序一致

字节序的重要性

  • 跨网络通信时,发送方和接收方必须约定字节序(通常使用网络字节序/大端序)
  • 序列化/反序列化二进制数据时必须明确字节序
  • 数据在不同架构的机器间迁移时需要考虑字节序转换

相关笔记

链接到