Почему требуется выравнивание памяти? [Дубликат]

Возможный дубликат:
Цель выравнивания памяти

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

Но если у нас есть память, похожая на одну аппаратную часть, то, учитывая адрес, почему мы не можем прочитать 2-байтовый код непосредственно из этой позиции. любить:

Я думал над этим. Я думаю, что если бы память была в нечетно-четном виде, то теория применима.

Что мне не хватает?

 Johan Lundberg14 окт. 2012 г., 12:09
просто аппаратное обеспечение хранит данные в блоках по 1,2,4 байт (в зависимости от аппаратного обеспечения). Поэтому, если вам нужны два байта из разных блоков, вам нужно выполнить две операции.
 Bo Persson14 окт. 2012 г., 12:58
И некоторые аппаратные средства будут просто отказываться делать доступ в два цикла.Всегда ли невыровненный доступ к памяти вызывает ошибки шины?
 Ashish Negi14 окт. 2012 г., 14:32
Это не возможный дубликатstackoverflow.com/questions/381244/purpose-of-memory-alignment , Я читал это раньше и пошел по ссылке www.ibm.com/developerworks/library/pa-dalign/ из ответа. и я обнаружил, что они показывают все диаграммы, как одну большую память, тогда я думал об этом вопросе. Какие бы ответы я ни получил, они уже написаны на мой вопрос. Я хотел проверить это только.

Ответы на вопрос(3)

соответствующих ширине шины. Например, если шина имеет ширину 32 бита, из шины в процессор идет 32 провода данных (вместе с другими проводами для сигналов управления).

Внутри процессора различные провода и коммутаторы доставляют эти данные туда, где это необходимо. Если вы прочитаете 32 выровненных бита в регистр, провода могут доставлять данные непосредственно в регистр (или другое место хранения).

Если вы читаете 8 или 16 выровненных битов в регистр, провода могут доставлять данные таким же образом, а остальные биты в регистре устанавливаются в ноль.

Если вы прочитаете 8 или 16 битов без выравнивания в регистр, провода не могут доставить данные напрямую. Вместо этого биты должны быть сдвинуты: они должны проходить через другой набор проводов, чтобы их можно было «переместить», чтобы они совпали с проводами, идущими в регистр.

В некоторых процессорах дизайнеры добавили дополнительные провода и переключатели для этого перемещения. Это может быть очень дорого с точки зрения количества кремния, которое требуется. Вам нужно много дополнительных проводов и переключателей, чтобы можно было перемещать любые возможные невыровненные байты в нужные места. Поскольку это так дорого, в некоторых процессорах нет полного переключателя, который может сделать все изменения немедленно. Вместо этого устройство сдвига может перемещать биты только на байт или около того за такты ЦП, и требуется несколько циклов для смещения на несколько байтов. В некоторых процессорах для этого вообще нет проводов, поэтому все нагрузки и хранилища должны быть выровнены.

если вам нужно прочитать 2 байта, то процессор должен будет выполнить два цикла чтения, это потому, что память является адресуемой по байту, т.е. каждому байту предоставляется уникальный адрес.

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

 Ashish Negi14 окт. 2012 г., 12:24
да, верно, так что это понятие «выравнивание памяти хорошо» не имеет смысла в единственной памяти ч / б. ??? каждый байт, будь то в банке памяти или сингл-памяти получает уникальный адрес, я верю?
 Manik Sidana14 окт. 2012 г., 12:28
да .. каждый байт имеет уникальный адрес .. Вы можете сослаться на эту статьюgeeksforgeeks.org/archives/9705
Решение Вопроса

мы (люди) визуализируют компьютерную память.

В действительности, думайте о памяти как о огромной матрице битов. К каждому столбцу матрицы прикреплен «читатель», который может читать / записывать любой бит из этого столбца. Каждая строка матрицы имеет «селектор», который может выбирать определенный бит, который читатель будет читать / записывать.

Следовательно, этот читатель может прочитать всю выбранную строку матрицы одновременно. Длина этой строки (количество столбцов матрицы) определяет, сколько данных можно прочитать одновременно. Например, если у вас есть 64 столбца, ваш контроллер памяти может читать 8 байтов одновременно (хотя обычно он может делать больше, чем это).

Пока вы сохраняете свои данные выровненными, вам потребуется меньше обращений к памяти. Даже если вам нужно прочитать только два бита, но они расположены в разных строках, вам потребуется два обращения к памяти вместо одного.

Кроме того, есть целый аспектпишу, это другая проблема.

Так же, как вы можете прочитать всю строку, вы также можете написать всю строку. Если ваши данные не выровнены, когда вы пишете что-то, что не является полной строкой, вам нужно будет выполнить чтение-изменение-запись (прочитать старое содержимое строки, изменить соответствующую часть и записать новое содержимое).

 Aubin14 окт. 2012 г., 12:27
Ваша «читательская» парабола очень понятна! Спасибо

Ваш ответ на вопрос