05. Layout de agregados
@packed
@packed reduce el padding de un struct, mold o flags:
@packed
struct Header:
tag: byte
length: uint32
Úsalo cuando el formato externo define offsets compactos. No lo uses como sinónimo de atomicidad o de ausencia de alineación para todos los accesos.
@align(N)
@align solicita una alineación explícita y solo acepta una potencia de dos
entre 1 y 64:
@align(16)
struct SIMDValue:
value: uint64
No se puede repetir el decorador. La alineación solicitada no puede reducir la
alineación natural del agregado, salvo las reglas específicas de un agregado
@packed.
@order_msb
@order_msb solo se aplica a flags y coloca el primer bitfield desde el
extremo más significativo:
@order_msb
flags NetworkBits uint8:
version: uBint<3> = 0
kind: uBint<5> = 0
El orden predeterminado es LSB. @order_lsb fue retirado por ser redundante y
debe producir un error. Ninguno de estos decoradores cambia el orden de bytes
de un entero en memoria.
volatile es un calificador separado (volatile struct, volatile mold o
volatile flags): conserva accesos, pero no es @volatile ni hace atómicas las
operaciones.