これを読みまし た アライメントについていつ心配する必要がありますか? しかし、次の例のように、placement new 演算子によって返される整列されていないポインターについて心配する必要があるかどうかはまだわかりません。
class A {
public:
long double a;
long long b;
A() : a(1.3), b(1234) {}
};
char buffer[64];
int main() {
// (buffer + 1) used intentionally to have wrong alignment
A* a = new (buffer + 1) A();
a->~A();
}
__alignof(A) == 4
、 に(buffer + 1)
位置合わせされていません4
。しかし、すべて正常に動作します - 完全な例はこちら: http://ideone.com/jBrk8
これがアーキテクチャに依存する場合、私は使用しています: linux/powerpc/g++ 4.xx
[更新] この質問を投稿した直後に、次の記事を読みました: http://virtrev.blogspot.de/2010/09/memory-alignment-theory-and-c-examples.html。おそらく、私の場合の唯一の欠点はパフォーマンスの低下でしょう。