Почему выравнивание памяти 4 необходимо для эффективного доступа? - PullRequest
1 голос
/ 28 апреля 2010

Я понимаю, почему данные должны быть выровнены (и все усилия, предпринимаемые для его достижения, такие как заполнение), чтобы мы могли уменьшить количество обращений к памяти, но это предполагает, что процессор может просто выбирать адреса, кратные 4 (предположим, что мы используем 32-битная архитектура). И из-за этого предположения нам нужно выровнять память.

Мой вопрос:
Почему мы можем просто получить доступ к адресам, кратным 4 (эффективность, аппаратное ограничение, еще один)?

В чем преимущества этого? Почему мы не можем получить доступ ко всем доступным адресам?

1 Ответ

4 голосов
/ 28 апреля 2010

Память построена из аппаратного обеспечения (ОЗУ), которое подключено к шинам памяти. Чем шире шина, тем меньше циклов требуется для получения данных. Если бы память была шириной в один байт, вам понадобилось бы четыре цикла, чтобы прочитать одно 32-битное значение. Со временем архитектуры памяти эволюционировали, и в зависимости от класса процессора (встроенный, низкое энергопотребление, высокая производительность и т. Д.) И конструкции кеша память может быть довольно широкой (скажем, 256 бит).

Учитывая очень широкую внутреннюю шину (между ОЗУ или кэш-памятью) и регистры, скажем, в два раза больше ширины регистра, вы можете получить значение за один цикл независимо от выравнивания, если в пути данных есть сдвиг барреля. Стволовые манипуляторы дороги, поэтому они есть не у всех процессоров; без одного в пути потребуется несколько циклов, чтобы выровнять значение.

...