Является ли загрузка переменных, выровненных по границам слов, быстрее, чем невыровненные операции загрузки на процессорах x86 / 64 (Intel / AMD 64 бит)?
Коллега Я считаю, что невыровненные нагрузки являются медленными, и их следует избегать. Он цитирует добавление элементов к границам слов в структурах как доказательство того, что невыровненные загрузки выполняются медленно. Пример:
struct A {
char a;
uint64_t b;
};
Структура A обычно имеет размер 16 байт.
С другой стороны, в документации компрессора Snappy говорится, что Snappy предполагает, что «невыровненные 32- и 64-битные загрузки и сохранения обходятся дешево». Судя по исходному коду, это справедливо для 32- и 64-битных процессоров Intel.
Итак: Что здесь правда? Если и на сколько невыровненные нагрузки будут медленнее? При каких обстоятельствах?