我读了这篇文章 我什么时候应该担心对齐?但我仍然不知道我是否必须担心放置 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。也许在我的情况下唯一的缺点是性能损失,我的意思是未对齐的访问成本超过对齐?