¿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í.