Нужно ли мне беспокоиться о выравнивании при использовании оператора 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.x.x.

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

23
задан Community 23 May 2017 в 12:09
поделиться