Перейти к содержимому
Korean Random
Pavel3333

Почему булевая переменная в реальности равна 1 байту, а не 1 биту?

Рекомендуемые сообщения

(изменено)

В GCC (могу спутать) булевая переменная представляется как 1 БАЙТ, а не бит! Почему? Это в ВОСЕМЬ РАЗ больше достаточного! При большом наборе таких булей будут огромные растраты памяти! Почему???

Изменено пользователем Pavel3333

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так это во всех языках так. ИМХО, потому что процессор обращается к байтам памяти, а не к битам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Минимальная адресация процессора 1 байт, максимальная 4(x86), либо 8(x86_64) байт. За эти границы вылезти можно только костылями, например vector<bool> использует один bool как один бит

  • Нравится 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну допустим. Но ведь можно создать в одном байте восемь таких булей и обращаться как к массиву. Или так тоже нельзя делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Ну допустим. Но ведь можно создать в одном байте восемь таких булей и обращаться как к массиву. Или так тоже нельзя делать?
, это уже как программист пожелает. 

P.S. ИМХО, бесполезная трата ресурсов процессора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну допустим. Но ведь можно создать в одном байте восемь таких булей и обращаться как к массиву. Или так тоже нельзя делать?

vector<bool> так и делает :heh: Подробности в гугле

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, почитаю! :-)


ИМХО, бесполезная трата ресурсов процессора.

А моё ИМХО - полезное использование ресурсов оперативки :heh:

ИМХО, для проца без разницы, к битам или к байтам обращаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

А моё ИМХО - полезное использование ресурсов оперативки
, сколько же у вас логических переменных?

 

 

ИМХО, для проца без разницы, к битам или к байтам обращаться

Выравнивание данных. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

, сколько же у вас логических переменных?

В моих программах их не так много - от нуля до одиннадцати.

 

Понял, был не прав. Оперативка может будет расходоваться чуть больше, но зато ничего тормозить не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

В моих программах их не так много - от нуля до одиннадцати.
, и вы хотели сэкономить 9 байт? Это явно перебор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему???

Есть такая штука, как бесполезная оптимизация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

, и вы хотели сэкономить 9 байт? Это явно перебор.

Себя я в пример не беру. Хотя, оптимизация и впрямь 

 

бесполезная
, так как если будет 100500 переменных, то их вес будет 98,15 кБ. Лучше уж позаботиться об оптимизации изображений. Они занимают в десятки и сотни раз больше места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Они занимают в десятки и сотни раз больше места.

А вот это очень интересно https://habrahabr.ru/company/io/blog/261971/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А вот это очень интересно

Очень полезно, спасибо. Никогда не знал о таких форматах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

1 БАЙТ, а не бит
это ты шутишь надеюсь? сколько оперативы в твоей машине? и какую же мегасофтину ты сваял, что бы уничтожить память?
4 гига имеющихся в калькуляторе слабо засрать будет то :heh:  

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)
сколько оперативы в твоей машине?

На ноуте - 3 ГБ. На компьютере - 4 ГБ.

 

4 гига имеющихся в калькуляторе слабо засрать будет то

НИВАЗМОЖНА СЛОЖНА засрать так 4 ГБ. Я состарюсь пока окончательно засорю бульками свою оперативку)

 

и какую же мегасофтину ты сваял, что бы уничтожить память?

Пока что никакую, просто задумался, что если прога типа 3D Макса носит много (действительно много!) булевых переменных, то почему не могли сократить размер каждой до бита. Так-то оператива у меня действительно засирается до нуля во время рендеринга, и посему подумал - почему бы не сделать так.

Изменено пользователем Pavel3333

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

Так-то оператива у меня действительно засирается до нуля во время рендеринга, и посему подумал - почему бы не сделать так.

И рендеринг это очень сложная штука с просчетом всего, что только возможно. Память там явно не под bool отдается, а под кэширование.. Изменено пользователем SkepticalFox

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

Кстати, bool в Си полный отстой. Лучше использовать char.

Почему? Можно ссылочку?

'По ссылке Ноглого Котэ'

post-18657-0-39348000-1470692373_thumb.png

Так-то они практически ни чем не отличаются. Разве что типом - логическим и символьным.

Изменено пользователем Pavel3333
  • Не нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему?

В C89 нет такого типа, а совместимостью со старыми компиляторами пренебрегать нельзя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×