在C99中使用什么逻辑来对齐可变长度数组(VLA)?
我正在考虑在堆栈上为具有未知对齐要求的任意对象分配存储,因此需要最严格的对齐。我宁愿避免使用alloca()
并使用(char
)VLA,因为它们的标准化程度更高。
我对GCC的测试并没有成功反驳他们在少于16个字节的情况下对齐。
答案 0 :(得分:3)
VLA与正常数组的对齐方式相同。
这意味着,如果要直接访问该整数,分配char
数组并将int
存储到其中是行不通的。
您可以使用_Alignof
来确定类型的对齐方式并手动计算所需的调整,但即便如此,也是最佳定义的实现。
我相信您可能必须在编译器上禁用严格别名才能使其正常工作。