Я знаю, что некоторые процессоры терпят неудачу с несогласованными данными, а другие, такие как oh-so-common x86, будут только медленнее с этим.Почему выравнивание важно?
Мой вопрос: почему? Почему процессору x86 сложнее получить данные от указателя 0x12345679
, чем от указателя 0x12345678
? Чтобы быть ясным, я знаю, что ошибки страницы могут произойти, если данные находятся на нескольких страницах, и я понимаю, что больше данных может потребоваться извлечь из памяти (одна часть для начала значения и одна для конца) , но это не всегда верно, и это не то, о чем мой вопрос. Я спрашиваю, почему это всегда медленнее?
Предположим, что память начинается с 0x10000000
. Почему процессору сложнее получить 2-байтовый short
от 0x10000001
, чем от 0x10000002
? Почему сложнее получить 4-байтовый int
от 0x10000001
, чем от 0x10000000
? И так далее.
Знаете ли вы о линиях кеша и о предварительном изъятии? – Oded 2010-12-02 20:14:00
Возможно, потому, что доступ к памяти одного размера не может перекрываться. Но, с другой стороны, доступ к памяти разных размеров по-прежнему может перекрываться, поэтому я не знаю, почему это так много. – CodesInChaos 2010-12-02 20:15:41
И это не только ошибки страниц, но и ошибки кэша, а строки кэша обычно намного меньше (AFAIK 64 байта типичны), чем страницы. Но это все еще не объясняет поведение в кеш-линии. – CodesInChaos 2010-12-02 20:16:46