Czy wiele zmiennych, które są wyrównane do granic słów, jest szybsze niż operacje nieobciążonego ładowania na procesorach x86/64 (Intel/AMD 64-bit)?Czy ładunki wyrównane do słowa są szybsze niż nieprzypisane obciążenia na procesorach x64?
Mój kolega twierdzi, że niewyrównane obciążenia są powolne i należy ich unikać. Cytuje dopełnianie pozycji do granic wyrazów w strukturach jako dowód, że nieprzypisane obciążenia są wolne. Przykład:
struct A {
char a;
uint64_t b;
};
Struktura A ma zwykle rozmiar 16 bajtów.
Z drugiej strony, documentation of the Snappy compressor stwierdza, że Snappy zakłada, że "niewyrównane 32- i 64-bitowe ładunki i sklepy są tanie". Według kodu źródłowego jest to prawda w przypadku 32-bitowych i 64-bitowych procesorów Intela.
A więc: jaka jest prawda? Jeśli i o ile wolniejsze są wolniejsze ładunki? W jakich okolicznościach?
Domyślna struktura upakowania wynosi 8, a więc A :: członkiem b jest w rzeczywistości wyrównane. Niewspółosiadani członkowie mogą przechodzić przez linię pamięci podręcznej i to zawsze jest drogie. –