2013-03-14 12 views

Odpowiedz

8

Oznacza to, że spiczasty adres mod 8 0:

pointer % 8 == 0 

To może być ważne dla operacji niskiego poziomu, gdzie może to wpłynąć Poprawność lub sprawność. Zobacz także this answer.

+2

Należy zadbać o wyrównanie bajtów, aby procesor mógł wydajnie odczytać adres pamięci. Niezrównane bloki pamięci powodują błędy magistrali. Zobacz sekcję Unaligned Access tutaj -> http://pl.wikipedia.org/wiki/Segmentation_fault#Bus_error –

6

Oznacza to, że pamięć zaczyna się na adres, który jest wielokrotnością 8.

Jak, dlaczego byś nawet Care: Dla pamięci, która nie jest wyrównany, CPU czasami wymaga dwóch dostępów to wszystko przeczytać. W niektórych przypadkach nawet nie spróbuje i po prostu rzuci błąd. Wzmianka o "wyrównaniu do 8 bajtów" polega na tym, że osoba dzwoniąca wie, czy będzie musiała zrobić fudging wskaźnika, czy nie.

(Zazwyczaj nie będzie obchodziło - kompilator zajmuje większość kwestii wyrównania dla ciebie Ale informacji tam w przypadku trzeba go z jakiegoś powodu.).

1

wyrównanie pamięci opisuje moduł adresów. Tak więc 8 bajtowe wyrównanie oznacza, że ​​adresy są wielokrotnościami ośmiu.

Było to krytyczne dla wielu starszych systemów, w których adresy wymagały wyrównania na granicy słowa, często wielokrotności czterech bajtów lub dwóch bajtów. Jeśli nie został prawidłowo wyrównany, program uległ awarii z "błędem wyrównania".

Nowsze maszyny rozwiązują ten problem przez ładowanie z dowolnego adresu, ale często oznacza to, że ładowanie danych zajmuje kilka cykli.