【发布时间】:2016-02-12 19:08:37
【问题描述】:
在 C 语言中,有没有办法在堆栈上进行过度对齐(即比从类型系统推断出的对齐程度更高)存储?
对于动态分配内存中的变量,如果所有其他方法都失败了,我们总是可以手动对齐,但是对于自动分配内存中的变量可以做什么?
我想可以使用char[size + alignment - 1],然后总是使用位操作来访问变量,但这似乎比必要的“位”更严重(har har har ;))。
【问题讨论】:
-
你试过 _Alignas 说明符吗?
-
@this 哎呀,我应该提到,没有 C11,谢谢
-
如果 C11 不是一个选项,你为什么要接受另一个答案? :-(
-
@this 我没有为
_Alignas选择它,而是为最后一段中的建议使用扩展名,因为这是获得可能与现有类型不匹配的任意对齐的唯一方法。尽管它是非标准的,但它是唯一可用的解决方案,并且得到广泛支持。不过,我对这个决定感到很伤心,两个答案都很好。