var arr {.align(256).}: MyArr var obj {.align(256).}: MyObj Run
I think this means references (or pointers) `arr` and `obj` are aligned, not objects these references point are aligned. type MyArr = ref array[4, int] MyObj = ref object MyArrObj = ref object arr {.align(256).}: array[4, int] var arr {.align(256).}: MyArr var obj {.align(256).}: MyObj var arrObj: MyArrObj arr = new MyArr # not aligned obj = new MyObj # not aligned arrObj = new MyArrObj # arrObj.arr is aligned echo cast[uint](arr.addr).toHex # aligned echo cast[uint](obj.addr).toHex # aligned echo cast[uint](arr).toHex # not aligned echo cast[uint](obj).toHex # not aligned Run As adding align pragma to a type is compile error, it seems defining an object type and adding the pragma to the field is the only way to align referenced object or array. type MyObj2 {.align(256).} = object # invalid pragma: align(256) MyObj2Ref = ref MyObj2 MyArray {.align(256).} = array[4, int] # invalid pragma: align(256) MyArrayRef = ref MyArray Run