有没有办法在C#中查询(Blittable) struct 的对齐?
public static int AlignmentOf<T>() where T : unmanaged
{
// what do
}
如果没有内置的方法,仅仅是通过反射遍历字段并找到最宽的原语吗?
有没有办法在C#中查询(Blittable) struct 的对齐?
public static int AlignmentOf<T>() where T : unmanaged
{
// what do
}
如果没有内置的方法,仅仅是通过反射遍历字段并找到最宽的原语吗?
我搜索了.NET文档,特别是Marshal和Unsafe类,但我没有找到这个功能.
而不是使用反射,maybe这样的东西会起作用吗?基本上,看看.NET如何将 struct T
与另一个 struct 对齐.
internal struct AlignmentHelper<T> where T : unmanaged
{
public byte Padding;
public T Target;
}
public static int AlignmentOf<T>() where T : unmanaged
{
return (int)Marshal.OffsetOf<AlignmentHelper<T>>(nameof(AlignmentHelper<T>.Target));
}
例如:
struct Example1
{
public byte A;
public byte B;
public int C;
}
[StructLayout(LayoutKind.Sequential, Pack = 2)]
struct Example2
{
public byte A;
public byte B;
public int C;
}
Console.WriteLine(AlignmentOf<Example1>()); // 4
Console.WriteLine(AlignmentOf<Example2>()); // 2