2009-09-22 11 views

Respuesta

28

GCC atributos: atributos

  • función descrita here
  • atributos variables descritas here
  • atributos tipo descrito here
+4

Mientras que estos enlaces son útiles, esta respuesta por sí solo no proporciona ninguna información. –

9

Un uso es para hacer cumplir la alineación de memoria de variables y miembros de la estructura. Por ejemplo

float vect[4] __attribute__((aligned(16))); 

se asegurará de que vect serán colocados en un límite de memoria de 16 bytes. No sé si eso es un gcc-ismo o más generalmente aplicable.

el compilador normalmente sólo alineado vect en un límite de 4 bytes. Con una alineación de 16 bytes, se puede usar directamente con las instrucciones de carga de SIMD donde lo cargarías en un registro de 128 bits que permite la suma, la resta, los productos de puntos y todo tipo de operaciones vectoriales.

A veces se quieren alineación de modo que una estructura puede ser superpuesta directamente sobre los registros de hardware asignados en memoria. O tiene que estar alineado para que el hardware pueda escribir en él y usar directamente un mecanismo de acceso directo a la memoria (DMA).

-2

¿Por qué se utiliza en los programas de C? Para limitar su portabilidad.

Comienza con un doble guión bajo, por lo que está en el espacio de nombres del implementador; no es algo definido por el estándar de idioma, y ​​cada proveedor del compilador puede usarlo libremente para cualquier propósito.

Edit: ¿Por qué se usa en los programas GNU C? Vea las otras respuestas que abordan esto.

+4

Uh, no creo que se use específicamente para retrasar la portabilidad. – GManNickG

+1

@mpl Así que no lo use. Los atributos le permiten exprimir más de su hardware, pero no está obligado a hacerlo. – qrdl

+0

@GMan: cuando se usa, ese es uno de los efectos que tendrá. – mlp

16

Para lo que los compiladores comparables de GCC y GCC usan __attribute__ la mayoría de los otros compiladores usan #pragma directivas.

creo que la solución de GCC es mejor ya que el comportamiento requerido de un reconocido #pragma es ignorarlo, mientras que si se utiliza un compilador que no entiende una especificación __attribute__, no se compilará - que generalmente es mejor, ya que entonces sabe lo que necesita transportar

Las especificaciones de atributos se utilizan para especificar aspectos de tipos, datos y funciones como el almacenamiento y la alineación que no se pueden especificar con C. A menudo son específicos del destino, principalmente no son portátiles, sin duda entre compiladores y, a menudo, entre objetivos . Evite su uso, excepto cuando sea absolutamente necesario para la función correcta del código.

Cuestiones relacionadas