¿Cuál es el punto específico de la llamada alineación de límites de direcciones? Por favor, gracias.
1. ¿Qué es la alineación de bytes y por qué es necesaria? El espacio de memoria en los ordenadores modernos se divide según bytes. En teoría, parece que el acceso a cualquier tipo de variable puede comenzar desde cualquier dirección, pero. La situación real es que cuando se accede a un tipo específico de variable, a menudo se accede a ella en una dirección de memoria específica, lo que requiere que varios tipos de datos se organicen en el espacio de acuerdo con ciertas reglas, en lugar de organizarse uno tras otro en secuencia. alineación. El papel y los motivos de la alineación: Cada plataforma de hardware maneja el espacio de almacenamiento de manera muy diferente. Algunas plataformas solo pueden acceder a ciertos tipos de datos desde determinadas direcciones. Por ejemplo, las CPU de algunas arquitecturas encontrarán errores al acceder a una variable no alineada. La programación bajo esta arquitectura debe garantizar la alineación de bytes. Este puede no ser el caso en otras plataformas, pero lo más común es que si no se siguen las instrucciones. son adecuados para ello. La plataforma requiere alineación del almacenamiento de datos, lo que provocará pérdidas en la eficiencia del acceso. Por ejemplo, algunas plataformas comienzan desde una dirección par cada vez que leen. Si se almacena un tipo int (se supone que es un sistema de 32 bits) al comienzo de la dirección par, entonces los 32 bits se pueden leer en una sola lectura. ciclo, y si se almacena en una dirección impar Desde el principio, se requieren 2 ciclos de lectura, y los bytes alto y bajo de los dos resultados de lectura se juntan para obtener los datos de 32 bits. Obviamente la eficiencia de lectura cae mucho. 2. Mire la siguiente estructura: struct MyStruct; ¿Qué pasará si usa sizeof en la estructura MyStruct? ¿Qué es el tamaño de (MyStruct)? Tal vez pregunte así: sizeof(MyStruct)=sizeof(double) sizeof(char) sizeof(int)=13 Pero al probar el tamaño de la estructura anterior en VC, encontrará que sizeof(MyStruct) es 16. ¿Sabes por qué se obtiene ese resultado en VC? De hecho, este es un tratamiento especial del almacenamiento de variables por parte de VC. Para mejorar la velocidad de almacenamiento de la CPU, VC "alinea" las direcciones iniciales de algunas variables. De forma predeterminada, VC estipula que el desplazamiento de la dirección inicial de cada variable miembro en relación con la dirección inicial de la estructura debe ser un múltiplo del número de bytes ocupados por el tipo de variable. Los tipos comunes de alineaciones se enumeran a continuación (vc6.0, sistema de 32 bits). Alineación de tipos (el desplazamiento de la dirección inicial del almacenamiento de variables en relación con la dirección inicial de la estructura) Char El desplazamiento debe ser sizeof(char), que es un múltiplo de 1 int El desplazamiento debe ser sizeof(int), que es un múltiplo de 4 float El desplazamiento debe ser sizeof(float), que es un múltiplo de 4. Double El desplazamiento debe ser sizeof(double), que es un múltiplo de 8. Short El desplazamiento debe ser sizeof(short), que es un múltiplo de 2. Cada variable miembro se almacena de acuerdo con Solicitar espacio en el orden en que aparecen en la estructura y ajustar la posición de acuerdo con la alineación anterior. El byte vacante VC se llenará automáticamente. Al mismo tiempo, para garantizar que el tamaño de la estructura sea un múltiplo del número de límite de bytes de la estructura (es decir, el número de bytes ocupados por el tipo que ocupa el mayor espacio en la estructura), VC aplique automáticamente espacio para la última variable miembro según sea necesario. Complete los bytes vacíos. Si te ayuda recuerda aceptarlo como una respuesta satisfactoria, ¡gracias! ¡Te deseo una vida feliz! vae.la