1. 数组与指针运算 (Array Arithmetic)

数组在机器级只是连续的字节序列。C 语言的指针运算实际上是地址计算

  • 公式: 对于 T A[N],元素 A[i] 的地址为:
  • 二维数组: 对于 T D[R][C],元素 D[i][j] 的地址为:
  • 工程意义: 汇编器会将乘法优化为移位和 LEA 指令(如我们之前分析的步长 4*(N+1))。

2. 结构体与对齐 (Structs & Alignment)

对齐原则: 任何 K 字节的基本对象,其地址必须是 K 的倍数。

  • 目的: 硬件效率。内存子系统读取对齐数据比非对齐数据快得多(甚至某些 CPU 不支持非对齐读取)。
  • 填充 (Padding): 编译器会在字段之间插入“废料”以满足对齐要求。
    • 安全视角: 这些 Padding 区域有时可能藏匿脏数据或被利用。

3. 结构体末尾对齐

结构体的总大小必须是其最大字段对齐要求的倍数。这导致结构体末尾也可能存在 Padding(尤其是数组场景)。