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

Возможный дубликат:

Цель выравнивания памяти

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

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

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

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

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

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

Решение Вопроса

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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