Czy naprawdę muszę się martwić o wyrównanie podczas korzystania z nowego operatora umieszczania?

Czytam toKiedy powinienem martwić się o wyrównanie?, ale nadal nie wiem, czy muszę się martwić, że nie zostanie wyrównany wskaźnik zwrócony przez umieszczenie nowego operatora - jak w tym przykładzie:

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) nie jest wyrównane do4. Ale wszystko działa dobrze - pełny przykład tutaj:http: //ideone.com/jBrk

Jeśli to zależy od architektury, używam: linux / powerpc / g ++ 4.x.x.

[AKTUALIZACJA] Zaraz po opublikowaniu tego pytania przeczytałem ten artykuł:http: //virtrev.blogspot.de/2010/09/memory-alignment-theory-and-c-examples.htm. Może jedyną wadą w moim przypadku byłaby utrata wydajności, to znaczy niezaangażowany koszt dostępu bardziej niż wyrównan

questionAnswers(5)

yourAnswerToTheQuestion