Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выравнивание - что это такое? / 9 сообщений из 9, страница 1 из 1
08.01.2013, 15:18
    #38102217
Выравнивание - что это такое?
всем привет, всех с новым годом. Не смог забыться в алкогольном угаре, теперь всякие мысли терзают по программированию. Есть переменная типа int. Располагается, например, так:
1021 - первый байт.
2022 - второй байт.
2023 - третий байт.
2024 - четвертый байт.
Зачем нужно выравнивать, чтобы адрес начинался с кратного? Процессор за один так все 4 байта читает? В чем тогда проблема, что данные лежат начиная с не кратного адреса?
...
Рейтинг: 0 / 0
08.01.2013, 15:28
    #38102225
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
просто_дураквсем привет, всех с новым годом. Не смог забыться в алкогольном угаре, теперь всякие мысли терзают по программированию. Есть переменная типа int. Располагается, например, так:
1021 - первый байт.
2022 - второй байт.
2023 - третий байт.
2024 - четвертый байт.
Зачем нужно выравнивать, чтобы адрес начинался с кратного? Процессор за один так все 4 байта читает? В чем тогда проблема, что данные лежат начиная с не кратного адреса?

давно читал... Не помню уже чем это вызвано, но насколько я помню выравнивание всего-лишь ускоряет работу. То есть процу обращения к кратным адресам даются быстрее.
...
Рейтинг: 0 / 0
08.01.2013, 16:52
    #38102290
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
просто_дуракВ чем тогда проблема, что данные лежат начиная с не кратного адреса?
производительность падает

для SSE инструкций - просто требование

Процессор за одно обращение читает несколько больше, чем 4 байта - смотрите cache line size
...
Рейтинг: 0 / 0
08.01.2013, 20:08
    #38102476
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
просто_дуракЗачем нужно выравнивать, чтобы адрес начинался с кратного?Чтобы было одно физическое чтение, а не два (x86). Чтобы не было аппаратных исключений (PPC и, вероятно, другие процессоры).
...
Рейтинг: 0 / 0
09.01.2013, 10:51
    #38102984
jmp
jmp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
К слову, емнип, на X86 тоже можно включить ИС на невыровненное обращение. Только это никто не делает по прозаическим причинам.
...
Рейтинг: 0 / 0
10.01.2013, 21:17
    #38105579
Выравнивание - что это такое?
Да, дело в процессорах - нашел перевод статьи интересной про гранулярность: http://konishchevdmitry.blogspot.ru/2010/01/blog-post.html
Получается, некоторые процессоры поддерживают гранулярность, некоторые - нет, т.е. понятия "выровнены\не выровнены данные" не существует - всегда за раз все считывает. Не могу в толк взять, зачем тогда придумали эту гранулярность, она же замедляет работу.
...
Рейтинг: 0 / 0
10.01.2013, 22:57
    #38105647
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
просто_дурак,

статья - говно
...
Рейтинг: 0 / 0
11.01.2013, 12:45
    #38106199
jmp
jmp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
просто_дурак, что такое в твоём представлении "гранулярность"?
...
Рейтинг: 0 / 0
11.01.2013, 13:11
    #38106247
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выравнивание - что это такое?
просто_дуракДа, дело в процессорах - нашел перевод статьи интересной про гранулярность: http://konishchevdmitry.blogspot.ru/2010/01/blog-post.html
Получается, некоторые процессоры поддерживают гранулярность, некоторые - нет, т.е. понятия "выровнены\не выровнены данные" не существует - всегда за раз все считывает. Не могу в толк взять, зачем тогда придумали эту гранулярность, она же замедляет работу.

Там же вроде всё просто написано. Что бы легче было понять, перейдём к побитному чтению и представим, что нам надо считать два байта, но не с целым адресом, а смещённый на 3 бита вправо (то есть с третьего по 7-ой бит первого байта второй байт и с 0-го по 2-ой бит третьего байта). Как мы будем их читать? правильно...
для первого байта - читаем первый байт, смещаем, читаем второй байт, смещаем, сливаем...
для второго байта - читаем второй байт, смещаем, читаем третий байт, смещаем, сливаем...

Вообщем дофига действий, когда можно было бы обойтись двумя чтениями. НО... теперь представим, что мы можем читать не байт за один раз, а сразу 2 байта... тогда нужно всего лишь одно чтение. То есть имеем прирост скорости вдвое.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выравнивание - что это такое? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]