То, что предназначено “памятью, составляет выровненных 8 байтов”?

При прохождении через одного проекта я видел, что данные оперативной памяти - "выровненных 8 байтов". Кто-либо может объяснить, что это означает?

29
задан legoscia 3 October 2017 в 10:24
поделиться

3 ответа

Объект, который "выровнен по 8 байтам", хранится по адресу памяти, который кратен 8.

Многие процессоры загружают некоторые типы данных только из выровненных мест; на других процессорах такой доступ просто быстрее. Существует также несколько других возможных причин использования выравнивания памяти - не видя кода, трудно сказать, почему.


Выровненный доступ быстрее, потому что внешняя шина памяти имеет ширину не в один байт - обычно она имеет ширину 4 или 8 байт (или даже больше). Это означает, что процессор не получает один байт за раз - он получает 4 или 8 байт, начиная с запрашиваемого адреса. Вследствие этого 2 или 3 младших бита адреса памяти фактически не передаются процессором - внешняя память может быть прочитана или записана только по адресам, кратным ширине шины. Если бы вы запросили байт по адресу "9", процессор на самом деле запросил бы у памяти блок байтов, начинающийся с адреса 8, и загрузил бы второй из них в ваш регистр (отбросив остальные).

Это означает, что для доступа по смещению может потребоваться два чтения из памяти: Если вы запрашиваете 8 байт, начинающихся по адресу 9, процессор должен получить 8 байт, начинающихся по адресу 8, а также 8 байт, начинающихся по адресу 16, а затем замаскировать нужные вам байты. С другой стороны, если вы запрашиваете 8 байт, начинающихся с адреса 8, то потребуется только одна выборка. Некоторые процессоры даже не будут выполнять такую загрузку с неправильным выравниванием - они просто выдадут исключение (или даже молча загрузят неправильные данные!).

43
ответ дан 28 November 2019 в 01:22
поделиться

«X байтов выровнено» означает, что базовый адрес ваших данных должен быть кратен X. Его можно использовать для использования специального оборудования, такого как DMA, в каком-то специальном оборудовании, для более быстрого доступа со стороны процессора и т. Д. ..

Это случай процессора ячейки, где данные должны быть выровнены по 16 байтов, чтобы их можно было скопировать в / из сопроцессора.

5
ответ дан 28 November 2019 в 01:22
поделиться

Выравнивание памяти важно для производительности по-разному. У него есть причина, связанная с аппаратным обеспечением. С 80-х годов прошлого века существует разница во времени доступа между процессором и памятью. Скорость процессора растет быстрее, чем скорость памяти. Эта разница со временем становится все больше и больше (для примера: на Apple II процессор работал на частоте 1,023 МГц, память - в два раза чаще, 1 цикл для процессора, 1 цикл для видео. Современный ПК работает на частоте процессора около 3 ГГц, а памяти - едва ли 400 МГц). Одним из решений проблемы постоянно замедляющейся памяти является доступ к ней по все более широким шинам, вместо доступа к 1 байту за раз, процессор будет считывать из памяти слово шириной 64 бита. Это означает, что даже если вы считываете из памяти 1 байт, шина будет передавать целых 64 бита (8-байтовое слово). В памяти эти 8 байт будут находиться по адресам 0, 8, 16, 24, 32, 40 и т.д. Если вы обращаетесь, например, к 8-байтному слову по адресу 4, аппаратура должна будет прочитать слово по адресу 0, замаскировать старшие 4 байта этого слова, затем прочитать слово по адресу 8, замаскировать младшую часть этого слова, объединить ее с первой половиной и передать в регистр. Как видите, довольно сложная (а значит, медленная) операция. Это первая причина, по которой нравится выровненный доступ к памяти. Другую причину я назову через 2 часа.

11
ответ дан 28 November 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: