¿Se garantiza que las variables de Flotante complejo se alinearán en la memoria con 8 bytes?

En C99 se definieron los nuevos tipos complejos. Estoy tratando de entender si un compilador puede aprovechar este conocimiento para optimizar los accesos a la memoria. ¿Son estos objetos (A-F) de tipocomplex float Garantizado para ser 8 bytes alineados en la memoria?


#include "complex.h"
typedef complex float cfloat;

cfloat A;
cfloat B[10];

void func(cfloat C, cfloat *D)
{
    cfloat E;
    cfloat F[10];
}

Tenga en cuenta que paraD, la pregunta se refiere al objeto apuntado porD, no al propio puntero de almacenamiento. Y, si se supone que está alineado, ¿cómo se puede estar seguro de que la dirección pasada es de un complejo real y no de un tipo de otro tipo (no alineado con 8)?

ACTUALIZACIÓN 1: Probablemente me respondí en el último comentario sobre elD puntero. B / c no hay forma de saber qué dirección se asignará al parámetro de la llamada de función, no hay forma de garantizar que se alineará en 8. Esto es solucionable a través de__builtin_assumed_aligned() función.

La pregunta sigue abierta para las otras variables.

ACTUALIZACIÓN 2: He publicado unpregunta de seguimiento aquí.

Respuestas a la pregunta(1)

Su respuesta a la pregunta