es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El orden de colocación de __attribute__((section(“nombre”)))

Estoy utilizando un ejemplo de código en el que tengo esta definición:

#define PLACE_IN_SECTION( x ) attribute((section (x)))

en todo el código.

p.ej.

// archivo1.cpp
PLACE_IN_SECTION( “A” ) static int a1;

// archivo2.cpp
PLACE_IN_SECTION( “A” ) static int a2;

No puedo encontrar información sobre el orden en el que se colocan las variables en una sección específica.
Keil me dijo que todo lo pusiera en una estructura para tener control sobre las direcciones.
Pero aún quiero saber si hay alguna regla con respecto al orden, por compilador.

Así que básicamente la pregunta es quién será el primero, y por qué?

Usando tanto gcc como el compilador arm (v6)

Editar:
Estas variables son compartidas con otra CPU, y la dirección que obtienen afecta al sistema.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en gcc y arm, puedo proporcionar información sobre el uso del atributo __attribute__((section (__x__))) en la programación en C / C ++. Este atributo se utiliza para colocar una variable o función en una sección específica del programa compilado, lo que es útil en sistemas integrados o cuando el diseño de memoria debe controlarse según ciertas restricciones u optimizaciones de hardware.

    En cuanto al orden de las variables colocadas en una sección específica, no existe una regla inherente que defina su orden por compilador. El orden de colocación puede variar según la implementación del compilador y el nivel de optimización elegido. Por lo tanto, no se recomienda confiar en el orden de colocación si el código debe ser portátil o compartido entre diferentes compiladores o sistemas.

    Sin embargo, si el orden de colocación es crucial para el sistema, una solución propuesta es colocar todas las variables en la misma estructura y controlar las direcciones utilizando el atributo __attribute__((packed)), que obliga al compilador a no insertar ningún relleno entre los miembros de la estructura. De esta manera, el tamaño y el alineamiento de la estructura coinciden con el tamaño y el alineamiento total de sus miembros, y se preserva su orden dentro de la estructura.

    En conclusión, el atributo __attribute__((section (__x__))) es útil para controlar el diseño de memoria de programas compilados, pero no debe usarse para confiar en el orden de colocación de variables por compilador. Si el orden es importante para el sistema, se recomienda utilizar una estructura con el atributo __attribute__((packed)).

Comments are closed.