可变长度数组如何在C中对齐?

时间:2015-12-02 15:44:15

标签: c

在C99中使用什么逻辑来对齐可变长度数组(VLA)?

我正在考虑在堆栈上为具有未知对齐要求的任意对象分配存储,因此需要最严格的对齐。我宁愿避免使用alloca()并使用(char)VLA,因为它们的标准化程度更高。

我对GCC的测试并没有成功反驳他们在少于16个字节的情况下对齐。

1 个答案:

答案 0 :(得分:3)

VLA与正常数组的对齐方式相同。

这意味着,如果要直接访问该整数,分配char数组并将int存储到其中是行不通的。

您可以使用_Alignof来确定类型的对齐方式并手动计算所需的调整,但即便如此,也是最佳定义的实现。

我相信您可能必须在编译器上禁用严格别名才能使其正常工作。