Я столкнулся с этой страницей The Lost Art of C Structure Packing, и, хотя мне никогда не приходилось заполнять какие-либо структуры, я хотел бы узнать немного больше, чтобы когда/если мне тоже нужно - я могу.Где можно найти требования к выравниванию для любого произвольного компилятора?
Он говорит:
для хранения основных типов данных C на x86 или ARM процессор обычно не начинаются в произвольных байтовых адресов в памяти. Скорее, каждый тип, кроме char, имеет требование выравнивания; символы могут начинаться с любого байтового адреса, но 2-байтовые шорты должны начинаться с четного адреса, 4-байтовые int или float должны начинаться по адресу, делящемуся на 4, а 8-байтные длинные или удвоенные значения должны начинаться по адресу, делящемуся на 8 Подписанный или неподписанный не имеет значения.
Означает ли это, что все 32-разрядные процессоры (x86, ARM, AVR32, PIC32, ...) имеют это требование выравнивания? Что относительно 16-разрядных процессоров?
Если нет, и это конкретный аппарат, где я могу найти эту информацию? Я пытался искать через Microchip XC16 Manual, но я не мог найти требование к выравниванию, которые говорят, что Интс начинаются с адресом, кратных 4.
Я предполагаю, что информация есть, и я не ищу правильные ключевые слова - что «требование выравнивания», если я буду искать в Интернете для получения дополнительной информации?
Вопрос о «всем аппаратном обеспечении, прошлом, будущем, спекулятивном», довольно сложно ответить. –
@KerrekSB Суть того, что я прошу, это действительно, где я могу найти информацию для любого устройства, если все 32-разрядные процессоры arent совпадают. Это в руководстве? Если да, то каковы правильные термины или терминология для поиска и где? Это ясно? – efox29
Довольно сложно? Я ручался бы за невозможность. Это зависит от оборудования и реализации. x86, например, разрешает любые произвольно выровненные чтения/записи, компилятор может делать все, что ему нравится. ARM, с другой стороны, не допускает произвольно выровненных доступов. – Leandros