При чтении некоторых постов для знания выравнивания памяти у меня возникает вопрос о хорошем ответе от Что такое выравнивание распределения памяти? , @ dan04.
Читая пример, который он приводит,
0 1 2 3 4 5 6 7
|a|a|b|b|b|b|c|d| bytes
| | | words
Проблема в том, что на некоторых архитектурах ЦП инструкция по загрузке 4-байтового целого числа из памяти работает только на границах слов.Таким образом, вашей программе придется извлекать каждую половину b
с отдельными инструкциями.
Почему нельзя (может ли это?) Прочитать 4 байта (слово, предположим, 32 бита) напрямую, которые содержат b
?
Например, если я хочу b
0 1 2 3 4 5 6 7
|a|a|b|b|b|b|c|d| bytes
| | a word(assume it's 32 bit, get b directly)
чтение 1 слова начинается с address 2
.
, если я хочу a
0 1 2 3 4 5 6 7
|a|a|b|b|b|b|c|d| bytes
| | a word
читать 1 слово, начинающееся с address 0
и получать первые 2 байта и отбрасывать последние 2 байта.
, если я хочу c
и d
0 1 2 3 4 5 6 7
|a|a|b|b|b|b|c|d| bytes
| | a word
прочитайте 1 слово, начинающееся с address 4
, получите последние 2 байта и отбросьте первые 2 байта.
Тогда кажется, что выравнивание не требуется, что определенно неверно ..
Я, должно быть, что-то неправильно понял или у меня нет других знаний, пожалуйста, помогите исправить меня ..