Гарантируется ли, что переменные Complex Float будут 8-байтовыми в памяти?

В C99 были определены новые сложные типы. Я пытаюсь понять, может ли компилятор воспользоваться этими знаниями для оптимизации доступа к памяти. Являются ли эти объекты (A-F) типаcomplex float гарантированно выровнен в памяти 8 байт?


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

cfloat A;
cfloat B[10];

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

Обратите внимание, что дляDвопрос касается объекта, на который указываетD, а не к самому хранилищу указателей. И, если это предполагается выровненным, как можно быть уверенным, что переданный адрес имеет фактический комплекс, а не приведение из другого (не выровненного по 8) типа?

ОБНОВЛЕНИЕ 1: я, вероятно, ответил сам в последнем комментарии относительноD указатель. B / c нет способа узнать, какой адрес будет назначен параметру вызова функции, нет способа гарантировать, что он будет выровнен по 8. Это разрешимо через__builtin_assumed_aligned() функция.

Вопрос по-прежнему открыт для других переменных.

ОБНОВЛЕНИЕ 2: я отправилдополнительный вопрос здесь.

Ответы на вопрос(1)

Ваш ответ на вопрос