Возможный дубликат:
Цель выравнивания памяти
Я прочитал несколько статей в сети о выравнивании памяти и понял, что из правильно выровненной памяти (с двухбайтовым выравниванием) мы можем быстро получить данные за один раз.
Но если у нас есть память, похожая на одну аппаратную часть, то с учетом адреса, почему мы не можем прочитать 2-байтовый код непосредственно из этой позиции. лайк:
Я думал над этим. Я думаю, что если бы память была в нечетно-четном виде, то теория применима.
Что мне не хватает?
Ваши фотографии описывают, как мы (люди) визуализируют компьютерную память.
В действительности, думайте о памяти как о огромной матрице битов.
К каждому столбцу матрицы прикреплен «читатель», который может читать / записывать любой бит из этого столбца.
Каждая строка матрицы имеет «селектор», который может выбирать определенный бит, который читатель будет читать / записывать.
Следовательно, этот читатель может прочитать всю выбранную строку матрицы одновременно.
Длина этой строки (количество столбцов матрицы) определяет, сколько данных можно прочитать одновременно.
Например, если у вас есть 64 столбца, ваш контроллер памяти может читать 8 байтов одновременно (хотя обычно он может делать больше, чем это).
Пока вы сохраняете свои данные выровненными, вам потребуется меньше обращений к памяти.
Даже если вам нужно прочитать только два бита, но они расположены в разных строках, вам потребуется два обращения к памяти вместо одного.
Кроме того, есть целый аспект пишу, это другая проблема.
Так же, как вы можете прочитать всю строку, вы также можете написать всю строку.
Если ваши данные не выровнены, когда вы пишете что-то, что не является полной строкой, вам нужно будет выполнить чтение-изменение-запись (прочитать старое содержимое строки, изменить соответствующую часть и записать новое содержимое).
Данные из памяти обычно доставляются в процессор по набору проводов, соответствующих ширине шины. Например, если шина имеет ширину 32 бита, из шины в процессор идет 32 провода данных (вместе с другими проводами для сигналов управления).
Внутри процессора различные провода и коммутаторы доставляют эти данные туда, где это необходимо. Если вы прочитаете 32 выровненных бита в регистр, провода могут доставлять данные непосредственно в регистр (или другое место хранения).
Если вы читаете 8 или 16 выровненных битов в регистр, провода могут доставлять данные таким же образом, а другие биты в регистре устанавливаются в ноль.
Если вы прочитали 8 или 16 битов без выравнивания в регистр, провода не смогут доставить данные напрямую. Вместо этого биты должны быть сдвинуты: они должны проходить через другой набор проводов, чтобы их можно было «переместить», чтобы они совпали с проводами, идущими в регистр.
В некоторых процессорах дизайнеры добавили дополнительные провода и переключатели для этого перемещения. Это может быть очень дорого с точки зрения количества кремния, которое требуется. Вам нужно много дополнительных проводов и переключателей, чтобы можно было перемещать любые возможные невыровненные байты в нужные места. Поскольку это так дорого, в некоторых процессорах нет полного переключателя, который может сделать все изменения немедленно. Вместо этого модуль сдвига может перемещать биты только на один байт или около того за такты ЦП, и требуется несколько циклов для смещения на несколько байтов. В некоторых процессорах для этого вообще нет проводов, поэтому все нагрузки и хранилища должны быть выровнены.
В первом случае (один аппаратный элемент), если вам нужно прочитать 2 байта, то процессор должен будет выполнить два цикла чтения, это потому, что память адресуется по байту, т.е. каждому байту предоставляется уникальный адрес.
Организация памяти в виде банков помогает процессору загружать больше данных в регистры за один цикл чтения. Этот метод помогает сократить циклы чтения, что является очень медленным процессом по сравнению с процессорной мощностью процессора. Таким образом, за один цикл чтения вы можете прочитать больше данных.