gcc (GCC) 4.7.0
c89
x86_64
Hola,Estructuras acolchadas que usan __attribute __ (__ packed__), ¿realmente vale la pena?
Me pregunto ¿Merece la pena utilizar mediante el __attribute__ ((__packed__))
en las estructuras. Me parece que con él la estructura será más pequeña en tamaño. Pasando por la prueba que he realizado a continuación. Entonces usarlo sería una ventaja en tamaño.
Un caso para no usarlo, ya que no es portátil en otros compiladores. Entonces, para Visual Studio C++ esto no funcionará. Además de otros compiladores también.
¿El compilador no optimiza el código? ¿De modo que dejar que el compilador decida qué hacer sería mejor para el rendimiento?
¿Utilizaría el atributo alineado alguna diferencia? __attribute__((packed, aligned(4)))
Cuando añadí que devuelve el tamaño de 12.
Muchas gracias por todas las sugerencias,
#include <stdio.h>
struct padded {
int age; /* 4 */
char initial; /* 1 + 3 padded bytes */
int weight; /* 4 --> total = 12 */
};
struct __attribute__ ((__packed__)) unpadded {
int age; /* 4 */
char initial; /* 1 */
int weight; /* 4 --> total = 9 */
};
int main(int argc, char **argv)
{
struct padded padded_test;
struct unpadded unpadded_test;
printf("Padded [ %ld ]\n", sizeof(struct padded));
printf("Unpadded [ %ld ]\n", sizeof(struct unpadded));
return 0;
}
El acceso a la memoria no alineada es más lento – BlackBear
Para su estructura de ejemplo, empaquetarla * y * 4-alinearla es especialmente inútil. No ahorras espacio, solo des-alineas el campo 'peso '. La única razón para hacerlo es hacer coincidir algún diseño preexistente definido de esa manera (e incluso eso supone que usted sabe que la representación del objeto de 'int' en su plataforma es correcta para el campo 'age', etc.). –