2013-03-14 8 views

risposta

8

Ciò significa che l'indirizzo mod appuntito 8 è 0:

pointer % 8 == 0 

Ciò può essere importante per le operazioni di basso livello in cui potrebbe influire correttezza o l'efficienza. Vedi anche this answer.

+2

Uno si preoccuperebbe dell'allineamento dei byte per garantire che la CPU possa leggere l'indirizzo di memoria in modo efficiente. I blocchi di memoria non allineati causano errori di bus. Vedi la sezione Unaligned Access qui -> http://en.wikipedia.org/wiki/Segmentation_fault#Bus_error –

6

significa che la memoria inizia un indirizzo che è un multiplo di 8.

Per quanto riguarda il motivo per cui si sarebbe nemmeno la cura: Per la memoria che non è allineato, la CPU a volte richiede due accessi per leggerlo tutto. In alcuni casi, non tenterà nemmeno di lanciare un errore. La menzione di "allineati a 8 byte" è in modo che il chiamante sappia se dovrà eseguire il comando del puntatore o meno.

(Di solito, non sarà la cura - il compilatore si prende cura della maggior parte dei problemi di allineamento per voi, ma l'informazioni è lì in caso di necessità per qualche motivo..)

1

allineamento di memoria descrive il modulo degli indirizzi. Quindi l'allineamento a 8 byte significa che gli indirizzi sono multipli di otto.

Questo è stato fondamentale per molti sistemi precedenti in cui gli indirizzi dovevano essere allineati su un limite di "parola", spesso un multiplo di quattro byte o due byte. Se non è stato allineato correttamente, il programma si è bloccato con un 'errore di allineamento'.

Più macchine recenti risolvono questo problema caricando da qualsiasi indirizzo, ma spesso ciò significa che ci vogliono alcuni più cicli per caricare i dati.