me encontré con un código similar al siguiente día de hoy y estoy curioso en cuanto a lo que realmente está sucediendo:¿Qué es la sobrealineación de las regiones de ejecución y las secciones de entrada?
#pragma pack(1)
__align(2) static unsigned char multi_array[7][24] = { 0 };
__align(2) static unsigned char another_multi_array[7][24] = { 0 };
#pragma pack()
Durante la búsqueda de una referencia a la palabra clave __align en el compilador Keil, me encontré con esto:
Overalignment de regiones de ejecución y secciones de entrada Hay situaciones en las que desea sobrealinear código y secciones de datos ... Si tiene acceso al código fuente original, puede hacerlo en tiempo de compilación con __align (n) palabra clave ...
No entiendo lo que significa "código de sobrealimentación de secciones de datos y datos". ¿Alguien puede ayudar a aclarar cómo se produce esta sobrealineación?
Overalighment puede ser útil en ARM. La instrucción "load immediate" (MOV) no puede cargar un valor completo de 32 bits. En cambio, puede cargar 8 bits a la vez, rotar a cualquier posición. Por este motivo, es posible que el código intente hacer que la dirección finalice en más bits cero, lo que facilita o agiliza que el código compilado le cargue el valor del puntero. –