填充结构体,使其大小为16字节的倍数



我试图让我的c#结构匹配一些复杂的填充和包装规则。

  • 字段应按4字节边界对齐。
  • 整个结构体应该是16字节的倍数

使用StructLayout属性我可以确保字段在4字节边界上对齐。

[StructLayout(LayoutKind.Sequential, Pack=4)]
struct Foo
{
float a;
float b;
}

但是查看StructLayout属性的其他选项,我没有看到将结构填充到16字节的倍数的选项。c#中没有这个选项吗?

我看到的唯一选项是手动设置正确的大小,使用StructLayout属性的size属性。但对我来说,这似乎很脆弱。因为每次有人向这个结构体中添加字段时,他们都应该注意不要忘记更新大小。

经过更多的搜索,它确实看起来像我必须手动设置大小和FieldOffset来获得DirectX/HLSL/c#互操作代码中常量缓冲区的正确打包规则。

在我自己的项目中,这甚至有点复杂。因为我使用源生成器来创建这些结构。但最后我还是弄明白了。对于那些感兴趣的源代码可以在这里找到。

相关内容

  • 没有找到相关文章

最新更新