Я недавно прочитал интересную статью о производительности.
Там автор определил 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;
}
Как порядок полей в классе может повлиять на способ хранения экземпляра в памяти? Как это влияет на указанное выравнивание?