Путаница с примером выравнивания памяти - PullRequest
1 голос
/ 13 марта 2019

При чтении некоторых постов для знания выравнивания памяти у меня возникает вопрос о хорошем ответе от Что такое выравнивание распределения памяти? , @ 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 байта.

Тогда кажется, что выравнивание не требуется, что определенно неверно ..


Я, должно быть, что-то неправильно понял или у меня нет других знаний, пожалуйста, помогите исправить меня ..

1 Ответ

1 голос
/ 13 марта 2019

"Почему нельзя (может ли это?) Прочитать 4 байта (слово, предположим, 32 бита) напрямую, которые содержат b?"
Ответ, который вы цитировали уже выше.Ключ "на слове границы ".Это не то же самое, что "в размере слова".Т.е. эти процессоры могут считывать ширину слова только с ровно N*wordwidth, а не с N*wordwidth+2.

Граница слова (применимо только на упомянутых платформах) - это кратное значение ширины слова.0, 4, 8, 12 ... Но не 2, 6, 10 ...

Ответ на фразу из комментария, да.
Эти ЦП могут читать только с адреса 0, 4, 8, 12, 16 и т. Д.
Например, одно слово из адресов 0-3, одно слово из адресов 4-7.(Обратите внимание на добавленные 12.)

...