@Kash_Tan

Почему boolean использует больше памяти чем byte?

В таблицах типов данных написано что boolean использует 2 байта, когда byte 1 байт. boolean это вроде 1 и 0, true и false,
а byte это 0-255, тогда почему он использует меньше памяти?
  • Вопрос задан
  • 1705 просмотров
Решения вопроса 3
mayton2019
@mayton2019
Bigdata Engineer
С точки зрения ассемблера - удобнее делать операции над целым числом (DWORD) 32bit. Он - же int.
В масштабах современной памяти - безразлично выделять 1 байт или 4 байта. Все равно
другие структуры больше захватят тысячекратно. А простота компилируемого кода - здесь важнее.

Вот поэтому компилляторы и собирают boolean в int. А язык С++ позволяет проводить аналогии
между int и boolean. В зависимости от контекста число может быть как числом так и логической
величиной. (Тесная связь с ассемблером да).

А если речь допустим идет о массиве boolean - тогда смысл в экономии есть. В Java например
такой массив действительно будет использовать биты внутри байта.

В базах данных например (Oracle) вообще нет булевого типа с точки зрения хранения. Там предлагают
символьный тип 'Y' или 'N'. Это связано с дисковыми структурами хранения данных в datarow.

Поэтому sizeof(булевый тип) будет всегда парадоксом в разных системах программирования и языках.
Как компиллятору удобнее так и соберет.
Ответ написан
Комментировать
1. Это очень зависит от конкретного языка.
2. А ещё и от деталей реализации зависит. В некоторых языках даже может быть не определено, сколько байт занимает bool и он может занимать от 1 байта (меньше - только если реализовать его как битовый флаг в структуре побольше) до 8 байт (чтобы попасть в выравнивание)

А byte всегда равен одному байту, тк ему реально важен размер.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev
software engineer
boolean вообще принципиально может использовать 1 бит.
Но архитектура PC сделана таким образом, что минимальный размер, который мы можем адресовать, это байт.
Поэтому в языках программирования boolean может иметь разный размер, и скорее всего как минимум 1 байт.

Можно сделать кастомную реализацию с побитовыми операциями, тогда можно будет засунуть восемь boolean переменных в один байт, но вряд ли есть хоть один язык программирование, где такое будет сделано штатно, ибо это неудобно.
Читайте доку про ваш язык программирования
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks
Вы ошибаетесь. В документации явно написано, что булеан наследуется от int, а именно True == 1, False == 0. Вы можете это проверить с помощью int(True) иint(False).
Ответ написан
Steel_Balls
@Steel_Balls
0L3QsNGH0LjQvdCw0Lsg0YEgQkFTSUMg0L3QsCDQo9Ca0J3Qpi
Почему boolean использует больше памяти чем byte?

Это ложь.
boolean занимает меньше места, чем byte
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы