Dan*_*Tao 5 .net performance struct data-formats alignment
我的意思是,说我有一个struct代表一些数据,它看起来像这样:
struct LilStruct
{
public readonly short A;
public readonly byte B;
public readonly byte C;
public LilStruct(short a, byte b, byte c)
{
A = a;
B = b;
C = c;
}
}
Run Code Online (Sandbox Code Playgroud)
A short和两个byte值都可以适合32位.我想知道的是(对于对齐目的,性能,等等),如果以下列格式存储这些数据实际上是有意义的:
struct LilStruct
{
private readonly uint _value;
public LilStruct(short a, byte b, byte c)
{
_value = ((uint)a << 16) | ((uint)b << 8) | (uint)c;
}
public int A
{
get { return (int)(_value >> 16); }
}
public int B
{
get { return (int)(_value >> 8) & 0x000000FF; }
}
public int C
{
get { return (int)(_value & 0x000000FF); }
}
}
Run Code Online (Sandbox Code Playgroud)
这没有意义吗?有什么好处/缺点?
在 .NET 中,当你无论如何都要使用 a时,你也可以像这样struct装饰结构体:StructLayoutAttribute
[StructLayout(LayoutKind.Sequential, Pack=1)]
struct LilStruct
{
public readonly short A;
public readonly byte B;
public readonly byte C;
public LilStruct(short a, byte b, byte c)
{
A = a;
B = b;
C = c;
}
}
Run Code Online (Sandbox Code Playgroud)
这将产生字段按顺序布局的效果,例如字段B将从偏移量 16 开始。
值为 1 表示Pack字段在byte边界处对齐。
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |