Skip to content

Member Layout

对齐

在 C++ 中,可以指定类的对齐方式,原因可能是使用 SIMD(Single Instruction, Multiple Data)指令集或者需要特殊的内存布局。比如下面的示例用 alignas 指定按 16 字节对齐。

struct alignas(16) Vec
{
    float x, y, z, w;
};
无论 Vec 对象如何创建,它的地址都会按 16 字节对齐,也就是说地址模 16 的余数为 0。

  • 栈内存:编译器保证 Vec v 对象的地址按照 16 字节对齐。
  • 堆内存:通过 new Vec 分配的对象,operator new 会保证返回的内存地址按照 16 字节对齐。
  • 全局或静态变量:链接器/加载器会保证这些对象的地址按照 16 字节对齐。