Почему выбирается LayoutKind.Auto для ссылочных типов и LayoutKind.Sequential для типов значений? - PullRequest
0 голосов
/ 02 апреля 2011


Вот проблема, с которой я столкнулся.
CLR через C #, третье издание говорит: «Вы должны знать, что компилятор Microsoft C # выбирает LayoutKind.Auto для справки типов (классов) и LayoutKind.Sequential для типов значений (структур). "В чем разница между LayoutKind.Auto и LayoutKind.Sequential ? типа?
спасибо

1 Ответ

1 голос
/ 02 апреля 2011

Компилятор может улучшить производительность кэша, расположив поля близко друг к другу, к которым часто обращаются вместе (например, внутри цикла), чтобы они оказались в одной строке кэша.

Обновление : еще один больший потенциал оптимизации - это выравнивание членов. Например, byte может быть выровнено на 1 байт, а int обычно выровнено на 4 байта. Итак, учитывая:

byte b1;
int i1;
byte b2;
int i2;

Вы могли бы потратить 3 байта пространства при выравнивании целых 4 байтов:

b1  0  0  0
i1 i1 i1 i1
b2  0  0  0
i2 i2 i2 i2

Переупорядочив на

i1 i2 b1 b2

компилятор может уменьшить количество отходов:

i1 i1 i1 i1
i2 i2 i2 i2
b1 b2  0  0

Так что нужно всего 12 вместо 16 байтов.

Это зависит от используемой архитектуры ЦП или нет, но это дает выигрыш в производительности. Например, большинству 32-битных RISC-процессоров нравятся их 32-битные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...