Почему не размер данных типа bool только 1 бит в С#?
Я просто изучаю С# и глубже погружаюсь в типы данных.
Почему размер bool
типа 1 бит не равен?
Кажется, что он может содержать только одно из двух значений (true или false), так что бы это не заняло только 1 бит пространства для представления этого значения?
Это потому, что наименьший "адресуемый" размер значения представляет собой байт (8 бит), как указано в этом сообщении?
Моя общая цель состояла в том, чтобы логически предусмотреть различный размер каждого типа данных в С#, поэтому я пытался создать список всех типов данных и их размер выделенного бита, и это меня бросило.
Ответы
Ответ 1
Это потому, что наименьший "адресуемый" размер значения представляет собой байт
Да, точно то же самое. Для того, чтобы среда CLR была эффективной, она сопоставляет свои типы данных с нативными машинными типами данных во многом так же, как это делает компилятор на С++ (в значительной степени).
Ответ 2
Если вы хотите хранить много флагов экономичным способом, рассмотрите возможность использования Int32 или Int64 в качестве битовой маски, таким образом вы можете хранить 32 или 64 булевых флага в 32/64-битном типе данных. Вы должны выполнить битмакс-тесты, чтобы проверять или устанавливать значения, поэтому есть небольшая добавочная стоимость для доступа или обновления по булевой переменной.
Размер булевого поля в памяти равен 1 байту, а булевой переменной - 4 байта.
BitArray также удобен для обработки множества бит-флагов: http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx
Ответ 3
Я тоже это заметил... Я создал два массива: float [4000] и float? [4000]. Второй массив занимает в два раза больше места памяти, потому что float? реализуется как float и bool, а bool заканчивается тем, что принимает 32 бита так же, как и float.
Итак, в конце, если использование памяти является проблемой, использование значения float NaN для представления "null" в float [] лучше, чем использование float? [].
Заставляет меня чувствовать себя идиотом за все годы, когда я пытался использовать меньшие типы данных, полагая, что это на самом деле неплохо!: -)