É garantido que as variáveis ​​do Flutuante Complexo estarão alinhadas em 8 bytes na memória?

Em C99, os novos tipos complexos foram definidos. Eu estou tentando entender se um compilador pode aproveitar esse conhecimento na otimização de acessos à memória. São esses objetos (A-F) do tipocomplex float garantido para ser alinhado em 8 bytes na memória?


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

cfloat A;
cfloat B[10];

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

Note que paraD, a questão diz respeito ao objeto apontado porD, não para o armazenamento do ponteiro em si. E, se isso for considerado alinhado, como se pode ter certeza de que o endereço passado é de um complexo real e não de um outro tipo (não alinhado em 8)?

UPDATE 1: Eu provavelmente me respondi no último comentário sobre oD ponteiro. B / c não há como saber qual endereço será atribuído ao parâmetro da chamada de função, não há como garantir que ele será 8 alinhado. Isso é solucionável através do__builtin_assumed_aligned() função.

A questão ainda está aberta para as outras variáveis.

ATUALIZAÇÃO 2: postei umpergunta de acompanhamento aqui.

questionAnswers(1)

yourAnswerToTheQuestion