Компьютерная память состоит из битов. Биты организованы в группы. Компьютер может иметь гигабайт памяти, превышающий 1 000 000 000 байтов или 8 000 000 000 бит, но физические соединения с памятью не могут просто получить какой-либо конкретный бит из этой памяти.
Когда процессор хочет получить данные из памяти, онпомещает сигнал на шину , который запрашивает определенное слово памяти. Шина - это в основном набор проводов, которые соединяют различные части компьютера. Слово памяти - это группа битов определенного размера, специфичных для этого оборудования, возможно, 32 бита. Когда устройство памяти видит запрос на слово, оно получает эти биты и помещает их в шину одновременно. (Шина для этого будет иметь 32 или более проводов, поэтому она может одновременно переносить все данные для одного слова.)
Давайте продолжим на примере 32-битных слов. Поскольку память сгруппирована в слова из 32 битов, каждое слово имеет адрес памяти, кратный 32 битам или четырем байтам. И каждый адрес, кратный четырем (0, 4, 8, 12, 16,… 4096, 4100, 4104,…), является адресом слова. Процессор всегда читает или записывает память в единицах слов - это единственное взаимодействие, которое может выполнять аппаратное обеспечение;процессор не может прочитать отдельные байты из памяти. Если ваш int
в одном слове, то процессор может получить его из памяти, запросив это слово.
С другой стороны, предположим, что ваш int
начинается с адреса 99. Затем один байтэто слово начинается с адреса 96 (адреса с 96 по 99), и три байта этого слова находятся в слове, которое начинается с адреса 100 (адреса со 100 по 103). Чтобы получить int
, процессор должен прочитать два слова, а затем соединить из них байты, чтобы получить одно int
.
Во-первых, это пустая трата времени,Выполнение двух операций чтения из памяти занимает больше времени, чем одно чтение. Во-вторых, если процессор должен иметь дополнительные провода и схемы для этого, он делает процессор более дорогим и потребляет больше энергии, а также отнимает ресурсы от других вещей, которые процессор может делать, таких как добавление или умножение.
Таким образом, процессоры предназначены для предпочтения выровненных данных. Они могут иметь компоненты для обработки невыровненных данных, но использование этих компонентов может занять дополнительное время или ресурсы. Таким образом, компиляторы предназначены для выравнивания объектов способами, которые являются предпочтительными для целевой архитектуры.