【发布时间】:2019-11-20 18:14:34
【问题描述】:
我最近在interesting article 阅读了有关性能的文章。
在那里,作者定义struct如下:
public struct DecisionTreeNode
{
public short ShortValue;
public float FloatValue;
public byte ByteVal1;
public byte ByteVal2;
}
struct 的大小为 8 个字节。
一切都清楚了,但后来他建议为了获得性能,作者写道:
这个 [memory] 对齐问题意味着加载未对齐的值可能会更加昂贵。幸运的是,修复非常简单,您只需在类定义中交换字段的顺序即可。
所以他这样做了:
public struct DecisionTreeNode
{
public float FloatValue;
public short ShortValue;
public byte ByteVal1;
public byte ByteVal2;
}
类中字段的顺序如何影响在内存中存储实例的方式?它如何影响提到的对齐方式?
【问题讨论】:
-
我猜,对齐是 4 个字节。在第一种情况下,
short和float不适合 4 个字节,但在第二种情况下,最后三个元素完全适合 4 个字节。
标签: c# .net performance memory-alignment