alineación ayuda a la CPU obtener los datos de la memoria de una manera eficiente: las transacciones de menos de fallos de cache/ras, menos de autobuses, etc.
Algunos tipos de memoria (por ejemplo, RDRAM, DRAM, etc.) es necesario tener acceso de forma estructurada manera ("palabras" alineadas y en "transacciones de ráfaga", es decir, muchas palabras a la vez) para obtener resultados eficientes. Esto se debe a muchas cosas entre las cuales:
- configuración de tiempo: el tiempo que le toma a los dispositivos de memoria para acceder a las posiciones de memoria
- arbitraje del bus sobrecarga es decir, muchos dispositivos podrían querer acceder al dispositivo de memoria
"Relleno" se utiliza para corregir la alineación de las estructuras de datos con el fin de optimizar la eficiencia de transferencia.
En otras palabras, el acceso a una estructura "mal alineada" rendirá un rendimiento general más bajo. Un buen ejemplo de este tipo de escollos: supongamos que una estructura de datos está mal alineada y requiere que la CPU/controlador de memoria realice 2 transacciones de bus (en lugar de 1) para obtener dicha estructura, por lo que el rendimiento es menor.
Hay dos cuestiones distintas pero relacionadas: la alineación y los datos de los datos de estructura de relleno –
gcc alinea dobules de 8 bytes también en máquinas x86, aunque, al igual que el compilador de Microsoft. – nos
¿Por qué los dobles se alinean en 8 bytes si la CPU lee datos en fragmentos de 4 bytes? no debería importar si el doble está alineado a 8 o 4 bytes, ¿no? – Mat