Мне действительно нужно беспокоиться о выравнивании при использовании нового оператора размещения?

Я читал это Когда мне стоит беспокоиться о выравнивании? но я до сих пор не знаю, нужно ли мне беспокоиться о не выровненном указателе, возвращаемом оператором размещения 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/jBrk

Если это зависит от архитектуры, то я использую: linux / powerpc / g ++ 4.x.x.

[ОБНОВЛЕНИЕ] Сразу после публикации этого вопроса я прочитал эту статью:http: //virtrev.blogspot.de/2010/09/memory-alignment-theory-and-c-examples.htm. Может быть, единственным недостатком в моем случае было бы снижение производительности, я имею в виду стоимость выравниваемого доступа больше, чем выравнивание?

Ответы на вопрос(5)

Ваш ответ на вопрос