💾 内存完全指南

指令长度可变?内存区域有啥?多字节数据怎么存?彻底讲清楚

指令长度 — 不一定只占 1 个字节!
x86/x64 架构的指令是变长的,从 1 字节到 15 字节不等。指令通常包含: 操作码(Opcode) + 操作数(Operand)。 操作码决定"做什么",操作数决定"对谁做"。
内存区域(Memory Segments)— 程序内存布局
程序运行时,操作系统会把内存划分为不同的区域(段),每个区域有特定用途。 从高地址到低地址依次是:栈 → 堆 → BSS → 数据段 → 代码段。
多字节数据 — 跨多个地址怎么存?
int、float、指针等超过 1 字节的数据,需要占用连续的多个地址。 存储顺序有两种:小端序(Little Endian)大端序(Big Endian)。 x86/x64 使用小端序:低位字节存在低地址。
内存阵列 — 每个格子 = 1 Byte
点击任意格子查看详情。注意:多字节数据会跨多个格子!

单元格详情

点击左侧单元格查看

内存对齐 — 为什么 int 要从 4 的倍数地址开始?
为了提高访问速度,多字节数据通常要求对齐到其大小的倍数地址。 比如 4 字节的 int 应该放在地址 0、4、8... 等 4 的倍数处。
📝 核心要点

📏 指令长度

  • x86 指令是变长的,1-15 字节
  • 操作码 + 操作数(寄存器/立即数/地址)
  • 复杂指令(如 MOV [EAX+4], EBX)更长

🗂️ 内存区域

  • 代码段:存放机器指令(只读)
  • 数据段:已初始化的全局变量
  • BSS:未初始化的全局变量
  • 堆:动态分配(malloc/new)
  • 栈:局部变量、函数参数

🔢 多字节数据

  • int/float:4 字节,连续 4 个地址
  • double/pointer(64位):8 字节
  • 字符串:字符数组,以 \\0 结尾
  • 小端序:低位字节在低地址