我最近读过关于性能的有趣的文章。
在此,作者将struct定义为:
public struct DecisionTreeNode
{
public short ShortValue;
public float FloatValue;
public byte ByteVal1;
public byte ByteVal2;
}此struct的增量为8个字节。
这一切都很清楚,但随后他建议,为了获得更好的表现,作者写道:
这个内存对齐问题意味着加载非对齐值的代价可能更高。幸运的是,修复非常简单,您只需交换类定义中字段的顺序。
所以他这么做了:
public struct DecisionTreeNode
{
public float FloatValue;
public short ShortValue;
public byte ByteVal1;
public byte ByteVal2;
}类中字段的顺序如何影响在内存中存储实例的方式?它如何影响所提到的对齐?
发布于 2019-07-11 06:51:25
你在这里有一个很好的解释:
所有内容都与Pack字段有关(是其最大元素的大小或指定的打包大小属性=> StructLayout(LayoutKind.Sequential,Pack=X),以较小者为准)。
根据Pack字段,struct将顺序地将字段分组为Pack大小,并添加空字节以适应Pack字段。
结构化=> 1字节+8字节+1字节=>包字段=> 8 => 8+8+8=24字节
结构=> 1字节+1字节+8字节=>包字段=> 8 => 8 (1+1+6空字节)+8= 16字节。
如您所见,始终使用Pack字段大小对字段进行分组。
https://stackoverflow.com/questions/56982209
复制相似问题