Как небольшие типы данных упакованы в C#

Я не стремлюсь улучшить производительность или использование памяти, этот вопрос возник исключительно из любопытства.

Основной вопрос Учитывая следующий класс, будет ли компилятор 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; }
    }
}
5
задан Lea Hayes 21 June 2012 в 14:56
поделиться