É 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.