Очень важно никогда не задавать такой вопрос, потому что вы не получите прямого ответа.
Но так как вы все равно сделали: минимальный размер составляет 0 байт. Что вы получите, когда оптимизатору JIT удастся сохранить значение в регистре процессора. Следующий размер - 2 байта, для bool? и byte ?, 1 байт для HasValue, другой байт для значения. Что вы получите редко, потому что локальные переменные должны быть выровнены по адресу, кратному 4. Дополнительные 2 байта заполнения никогда не будут использоваться.
Следующий размер 3 для краткости? и char ?, теперь вы получите 1 байт заполнения.
Большой прыжок к следующему, инт? требуется 5 байтов, но заполнение увеличивает это до 8.
Etcetera. Вы узнаете об этом, написав немного такого кода:
int front = 42;
bool? center = null;
int back = 43;
Console.WriteLine("", front, center, back);
И просмотр инструкций машинного кода с помощью отладчика. Обратите внимание на смещения регистра ebp. И будьте осторожны, что стек растет.