Это не ухудшит производительность и не вызовет большой сложности в схемотехнике.
Это ложные предположения, которые мы принимаем как факт, которые действительно отбрасывают дальнейшее понимание.
Ваш комментарий в другом вопросе использовал гораздо более подходящую формулировку (" Я не думаю, что это будет ухудшаться" ...)
Считаете ли вы, что архитектура памяти использует много микросхем памяти параллельно для максимизации пропускной способности? И что конкретный элемент данных находится только в одной микросхеме, вы не можете просто прочитать любую микросхему, которая окажется наиболее удобной, и ожидать, что в ней будут нужные данные.
В настоящий момент процессор и память могут быть соединены вместе так, что биты 0-7 соединяются только с микросхемой 0, 8-15 с микросхемой 1, 16-23 с микросхемой 2, 24-31 с микросхемой 3. И для все целые числа N, ячейка памяти 4N хранится в микросхеме 0, 4N + 1 в микросхеме 1 и т. д. И это N-й байт в каждой из этих микросхем.
Давайте посмотрим на адреса памяти, хранящиеся в каждом смещении каждого чипа памяти
memory chip 0 1 2 3
offset
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
N 4N 4N+1 4N+2 4N+3
Таким образом, если вы загружаете из памяти байты 0-3, N = 0, каждый чип сообщает свой внутренний байт 0, все биты оказываются в нужных местах, и все отлично.
Теперь, если вы попытаетесь загрузить слово, начиная с ячейки памяти 1, что произойдет?
Сначала посмотрим, как это делается. Первые байты памяти 1-3, которые хранятся в микросхемах памяти 1-3 со смещением 0, заканчиваются в битах 8-31, потому что именно к ним прикреплены эти микросхемы памяти, даже если вы просили, чтобы они были в битах 0-23. Это не имеет большого значения, потому что центральный процессор может использовать их внутри, используя ту же схему, что и для логического сдвига влево. Затем в следующей транзакции байт 4 памяти, который хранится в микросхеме памяти 0 со смещением 1, считывается в биты 0-7 и превращается в биты 24-31, где вы хотели, чтобы это было.
Заметьте что-то здесь. Запрошенное вами слово делится на смещения, первая транзакция памяти считывается со смещения 0 трех чипов, вторая транзакция памяти читается со смещения 1 другого чипа. Вот в чем проблема. Вы должны сообщить микросхемам памяти смещение, чтобы они могли отправить вам правильные данные обратно, смещение составляет ~ 40 бит в ширину, а сигналы ОЧЕНЬ высокоскоростные. В настоящее время существует только один набор сигналов смещения, который подключается ко всем микросхемам памяти. Чтобы выполнить одну транзакцию для доступа к невыровненной памяти, вам потребуется независимое смещение (называемое адресной шиной BTW), работающее с каждым чипом памяти. Для 64-разрядного процессора вы бы изменили одну адресную шину на восемь, увеличившись почти на 300 контактов. В мире, где процессоры используют от 700 до 1300 контактов, это вряд ли можно назвать «незначительным увеличением схемотехники». Не говоря уже об огромном увеличении шума и перекрестных помех от этого множества сверхскоростных сигналов.
Хорошо, это не так уж и плохо, потому что на адресной шине может быть только максимум два разных смещения одновременно, и один всегда другой плюс один. Таким образом, вы можете обойтись одним дополнительным проводом для каждого чипа памяти, сказав в действительности либо (считайте смещение, указанное на адресной шине), либо (прочитайте смещение ниже), что составляет два состояния. Но теперь в каждом микросхеме памяти есть дополнительный сумматор, что означает, что он должен рассчитать смещение, прежде чем делать доступ к памяти, что замедляет максимальную тактовую частоту памяти. Это означает, что выравниваемый доступ становится медленнее, если вы хотите, чтобы невыровненный доступ был быстрее. Поскольку 99,99% доступа можно выровнять, это чистый убыток.
Так вот почему не согласованный доступ делится на два этапа. Потому что адресная шина используется всеми задействованными байтами. И это на самом деле упрощение, потому что, когда у вас разные смещения, у вас также задействованы разные строки кеша, поэтому вся логика когерентности кеша должна была бы удвоиться, чтобы дважды обрабатывать связь между ядрами ЦП.