Preciso realmente me preocupar com o alinhamento ao usar o novo operador de posicionamento?
I li thisQuando devo me preocupar com o alinhamento? mas ainda não sei se preciso me preocupar com o ponteiro não alinhado retornado pelo posicionamento de novo operador - como neste exemplo:
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)
não está alinhado com4
. Mas tudo funciona bem - exemplo completo aqui:http: //ideone.com/jBrk
Se isso depende da arquitetura, estou usando: linux / powerpc / g ++ 4.x.x.
[UPDATE] Logo após postar esta pergunta, li este artigo:http: //virtrev.blogspot.de/2010/09/memory-alignment-theory-and-c-examples.htm. Talvez as únicas desvantagens no meu caso sejam a penalidade de desempenho. Quero dizer, o acesso desalinhado custa mais do que o alinhado?