【发布时间】:2012-06-26 19:29:32
【问题描述】:
我想知道char 的静态分配数组的对齐保证。查看其他 SO 问题,我发现了一些有关动态分配的 char 数组。
对于静态分配的char 数组,它们是否对齐以便我可以将新的任何类型放入其中(只要它足够大)?还是这只适用于动态分配的?
char buff[sizeof(T)];
T * pT = (T*) buff;
new(pT) T(); // well defined?
...
pT->~T();
如果没有,我该如何解决这个问题?
【问题讨论】:
-
我相信 C++11 可以保证这一点,而 C++03 则不能。我会让其他人发布带有标准引用的实际答案。
-
@K-ballo:我认为 C++11 不能保证这一点。它为此添加了
alignas。 -
@Nawaz:这是我对 3.11/6 [basic.align] 的理解,你怎么看?我弄错了吗?
-
@K-ballo:我很确定你弄错了。 3.11/6 表示 char 类型具有最弱的对齐方式,而 3.11/5 表示更严格的对齐方式(具有较大的对齐值)满足较弱的对齐方式(具有较小的对齐值),而不是相反。归结为,只要您注意对齐,您就可以将 char 类型用于对齐的内存区域。按照 3.11/6 的注释对 7.6.2(对齐说明符)的引用来查看一种方法。另一种方法是过度分配 char 数组,并在数组内以适当的对齐方式使用偏移指针。
标签: c++ memory-alignment