Align 编译指示

align 编译指示是针对变量和对象字段成员的,用于修改所声明的实体的字节对齐要求。其参数必须是常数,是 2 的整数次幂。同一个声明存在多个有效的非 0 对齐的编译指示时,较弱的编译指示会被忽略。与类型的对齐要求相比,较弱的对齐编译指示的声明也会被忽略。

  1. type
  2. sseType = object
  3. sseData {.align(16).}: array[4, float32]
  4. # 每个对象都按 128 字节边界对齐
  5. Data = object
  6. x: char
  7. cacheline {.align(128).}: array[128, char] # 超量对齐的字符数组
  8. proc main() =
  9. echo "sizeof(Data) = ", sizeof(Data), " (1 byte + 127 bytes padding + 128-byte array)"
  10. # 输出: sizeof(Data) = 256 (1 byte + 127 bytes padding + 128-byte array)
  11. echo "sseType 的对齐长度是 ", alignof(sseType)
  12. # 输出: sseType 的对齐长度是 16
  13. var d {.align(2048).}: Data # Data 的这个实例的对齐要求更加严格
  14. main()

这种编译指示对 JS 后端没有任何影响。