Al navegar por la fuente DMD, parece que alignof
no tiene en cuenta los atributos align
.
Aquí es donde se maneja:
... if (ident == Id::__xalignof)
{
e = new IntegerExp(loc, alignsize(), Type::tsize_t);
}
Esto convierte una expresión .alignof
en una expresión size_t
con valor alignsize()
, por lo que vamos a ver alignsize()
para una matriz estática:
unsigned TypeSArray::alignsize()
{
return next->alignsize();
}
Simplemente obtiene la alineación del tipo de elemento (void
) en su caso.
void
es manejado por TypeBasic::alignsize()
, que simplemente reenvía a TypeBasic::size(0)
switch (ty)
{
...
case Tvoid:
size = 1;
break;
...
}
En cuanto a cómo manejar otros tipos alignof
, que no se ve como align
atributos se tienen en cuenta en absoluto, pero podría estar equivocado . Puede valer la pena probar la alineación manualmente.
lol wait ¿qué significa 'align' do? ¿Está ahí solo para la decoración? xD – Mehrdad
Creo que 'align' funciona, pero' alignof' solo obtiene la alineación del tipo, por lo que son cosas separadas. –
Extraño, me encontré con problemas que me llevaron a comprobar 'alignof' ... tengo que verificarlo dos veces ... – Mehrdad