Вопрос по c++, c, memory, struct – Почему предпочтение выравнивания структуры данных?
=====================================================================================

Тип каждого элемента структуры обычно имеет выравнивание по умолчанию, т.е. каждый элемент структуры выравнивается по заранее определенной границе.
По этой причине заполнение выполняется в следующем примере вики:

Какова (практическая) причина того, что выравнивание должно быть сохранено?

ния двух соседних слов из памяти (а не только одного) и применения некоторой дополнительной побитовой арифметики для правильного выполнения назначенной операции.

Некоторые архитектуры, такие как x86, позволяют делать это с затратами на производительность. Другие архитектуры (прежде всего ARM), либо вызовут исключение (обычно приводящее к`SIGBUS` сигнал для пользовательского процесса) или даже «круглый» адрес до ближайшей границы, что может привести к очень неприятным ошибкам.



ю, чтобы сделать доступ к ним как можно более быстрым, используя процессоры «natural». размер регистра.

Для 32-битных процессоров это 4 байта (или 32-битных), для 64-битных процессоров это 8 байтов.

Некоторые (не x86) процессоры будут генерировать ошибку, если вы попытаетесь получить доступ (скажем) к int, если он не выровнен по правильной границе.

Связь между различными устройствами является практической причиной сохранения выравнивания. При выравнивании по умолчанию эта структура будет иметь длину 24 байта, тогда как на 64-разрядном процессоре это будет 48 байтов, и ни один из элементов, кроме первого, не будет находиться в том же месте.

Обычно можно изменить заполнение структуры с помощью директивы компилятора / прагмы, что может свести на нет необходимость заполнения вручную, указанного в вашем примере, но обычно это отличается для каждого компилятора.



ять намного быстрее, чем их невыровненные аналоги.