La respuesta aceptada ("No") es correcta, pero quería aclarar una parte potencialmente engañosa. Agregaría un comentario pero necesito formatear un código; de ahí la nueva respuesta.
typedefs son sólo seudónimos o alias para el tipo real especificado, que no existe como un tipo separado de tener alineación diferente, embalaje, etc ..
Esto es incorrecto, al menos para GCC (el compilador de OP) y GHS. Por ejemplo, la siguiente compila sin errores, mostrando que la alineación puede se adjunta a un typedef.
La alineación perversa (mayor que el tamaño del objeto) es simplemente para el valor de choque y diversión.
#define CASSERT(expr) { typedef char cassert_type[(expr) ? 1 : -1]; }
typedef __attribute__((aligned(64))) uint8_t aligned_uint8_t;
typedef struct
{
aligned_uint8_t t;
} contains_aligned_char_t;
void check_aligned_char_semantics()
{
CASSERT(__alignof(aligned_uint8_t) == 64);
CASSERT(sizeof(aligned_uint8_t) == 1);
CASSERT(sizeof(contains_aligned_char_t) == 64);
}
Definitivamente no es una pregunta estúpida. Creo que myAlignedStruct2 está alineado de la misma manera que myAlignedStruct pero me gustaría estar seguro de ello. ¿Probaste una printf ("tamaños:% d,% d", sizeof (myAlignedStruct), sizeof (myAlignedStruct2)); ? – Shlublu
@Shlublu: 'sizeof' comprueba el embalaje, pero la alineación es diferente. No hay un operador estándar, pero GCC proporciona '__alignof __()' como se ilustra en mi respuesta. –
¡Ah, lo siento, me he confundido! ¡Esto hace que tu pregunta sea aún más interesante! – Shlublu