In malloc di libc (x), si dice che la funzione restituisca un puntatore a un'area di memoria di almeno x byte e il puntatore sia allineato a 8 byte. Cosa significa questo allineamento? Grazie.Al ritorno di malloc, cosa significa allineamento a 8 byte?
risposta
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.
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..)
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.
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 –