gpt4 book ai didi

alignment - 如何在 D 中对齐结构成员?

转载 作者:行者123 更新时间:2023-12-04 19:15:00 25 4
gpt4 key购买 nike

我试过这个

struct Foo(T)
{
align(8) void[T.sizeof] data;
}


static assert(Foo!(int).data.alignof == 8);

失败,告诉我对齐仍然是 1而不是 8 .

为什么会这样,我该如何修复它,以便它适用于任何 2 的幂(不仅仅是 8)的任意对齐?

最佳答案

浏览DMD源码,看起来是alignof不考虑align属性。

这里是处理它的地方:

... if (ident == Id::__xalignof)
{
e = new IntegerExp(loc, alignsize(), Type::tsize_t);
}

这将转换 .alignof表达式变成 size_t带值的表达式 alignsize() ,让我们看看 alignsize()对于静态数组:
unsigned TypeSArray::alignsize()
{
return next->alignsize();
}

在您的情况下,它只是获取元素类型( void )的对齐方式。
voidTypeBasic::alignsize() 处理,它只是转发到 TypeBasic::size(0)
switch (ty)
{
...
case Tvoid:
size = 1;
break;
...
}

查看其他类型如何处理 alignof ,看起来不像 align属性都被考虑在内,但我可能是错的。手动测试对齐可能是值得的。

关于alignment - 如何在 D 中对齐结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com