关键字__alignof__
允许你询问一个对象如何对齐,或者一个类型的需要的最小对齐。它的语法很像sizeof
。
例如,不过目标机器需要一个双精度值来使一个8位的边界对齐,这样__alignof__(double)
就是8.在许多RISC机器上就是这样的。在很多传统的机器设计,__alignof__(double)
是4或者甚至是2.
一些机器实际上从不需要对齐;它们允许参考任意数据类型甚至在一个奇数地址上。对这些机器,__alignof__
报告类型的建议对齐。
当__alignof__
的操作数是一个左值而不是一个类型时,这个值是这个左值已知有的最大对齐。它可能由于它的数据类有而有这个对齐,或者因为它是结构体的一部分并且从那个结构体继承了对齐。例如在这个声明之后:
struct foo { int x; char y; } foo1;
__alignof__(foo1.y)
的值可能是2或4,同__alignof__(int)
相同,即使foo1.y
的数据类型自己不需要任何对齐。
这是要求一个不完全的类型的对齐的错误。
一个使你说明一个对象对齐的关联特征是__attribute__ ((aligned (alignment)))
; 请看下一篇