Я ищу хороший (полный) документ о выравнивании памяти в С++, типичных подходах, различиях между компиляторами и общими ошибками. Просто чтобы проверить правильность моего понимания темы и узнать что-то новое.
Этот вопрос вдохновлен моим ответом на другой вопрос, в котором я использовал следующую конструкцию:
char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything
Он подвергся критике как несоответствующий правилам выравнивания памяти. Не могли бы вы объяснить в качестве бонуса, почему этот подход ошибочен с точки зрения выравнивания памяти? Пример, когда он не работает, будет высоко оценен. Я знаю, что это плохой подход в целом, но я часто использую его в реализации сетевых протоколов, поэтому это скорее практический вопрос, чем теоретический.
Также, пожалуйста, не упоминайте строгий сглаживание здесь, это для другого вопроса.