Jump to content
Korean Random
Pavel3333

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

Recommended Posts

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

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

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

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

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


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

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

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

 

 

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

 

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites
сколько оперативы в твоей машине?

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

 

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

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

 

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

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

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

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

Edited by Pavel3333
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Почему?

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

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...