Nie szukam poprawy wydajności lub wykorzystania pamięci, to pytanie było czysto wywołane ciekawością.W jaki sposób są pakowane małe typy danych w C#
Pytanie główne Biorąc pod uwagę następujące klasy będzie kompilator C# (Mono + .NET) zapakować dwie short
zmienne do 4 bajtów lub będą one zużywają 8 bajtów (z wyrównaniem)?
public class SomeClass {
short a;
short b;
}
Secondary Pytanie Jeżeli odpowiedź na powyższe pytanie nie było 4 bajty, to w następujący alternatywny oferta jakiekolwiek korzyści (gdzie SomeClass
jest stosowany w bardzo dużych ilościach):
// Warning, my bit math might not be entirely accurate!
public class SomeClass {
private int _ab;
public short a {
get { return _ab & 0x00ff; }
set { _ab |= value & 0x00ff;
}
public short b {
get { return _ab >> 8; }
set { _ab |= value << 8; }
}
}
Kompilator C# nie będzie miał z tym nic wspólnego - będzie to środowisko wykonawcze. –
Kiedy mówisz "jest używany w bardzo dużych ilościach" - ilu mówimy i jak są używane? Czy tworzysz tablicę/listę/etc z tych? –
@ReedCopsey Tak, teorią tego kontekstu byłaby duża lista z częstym dostępem do określonych pozycji według indeksu. –