在C99中,用于对齐可变长数组(VLAs)的逻辑是什么?
我正在考虑为具有未知对齐要求的任意对象在栈上分配存储空间,因此需要最严格的对齐方式。我希望避免使用alloca()
,而是使用(char
) VLAs,因为它们更好地标准化。
我的GCC测试还没有成功证明它们对齐在少于16字节的任何东西上。
在C99中,用于对齐可变长数组(VLAs)的逻辑是什么?
我正在考虑为具有未知对齐要求的任意对象在栈上分配存储空间,因此需要最严格的对齐方式。我希望避免使用alloca()
,而是使用(char
) VLAs,因为它们更好地标准化。
我的GCC测试还没有成功证明它们对齐在少于16字节的任何东西上。
可变长数组(VLAs)和普通数组一样对齐。
这意味着,如果您想直接访问存储在一个char
数组中的int
,那么这种方式是行不通的。
您可以使用_Alignof
来确定类型的对齐方式,并手动计算所需的调整,但即使如此,最好也是根据实现定义。
我认为您可能需要在编译器上禁用严格别名才能使其正常工作。
_Alignof
和_Alignas
是在C11中引入的,因此您需要一个支持此版本的编译器。 - Jens Gustedt