Я не стремлюсь улучшить производительность или использование памяти, этот вопрос возник исключительно из любопытства.
Основной вопрос
Учитывая следующий класс, будет ли компилятор C# (Mono + .NET) упаковывать две переменные short
в 4 байта или они будут потреблять 8 байтов (с выравниванием)?
public class SomeClass {
short a;
short b;
}
Дополнительный вопрос
Если бы ответ на приведенный выше вопрос не был 4 байта, могла бы следующая альтернатива предложить какие-либо преимущества (где SomeClass
используется в очень больших количествах):
// 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; }
}
}