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

Фото

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


  • Чтобы отвечать, сперва войдите на форум
38 ответов в теме

#1 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 18:12

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


Изменено: Pavel3333, 08 Август 2016 - 18:12

  • 0

#2 ktulho

ktulho
  • Premium Member
  • 4 365 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Август 2016 - 18:18

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


  • 0

#3 Наглый Котэ

Наглый Котэ

    Наркотэ

  • Premium Member
  • 1 510 сообщений
  • Nick:naglui_kote
  • WoT Server:RU (Русский)
  • Город: Саратов

Опубликовано 08 Август 2016 - 18:19

Если не окончательно туплю...
http://cppstudio.com/post/271/
  • 0

#4 Wanket

Wanket
  • Пользователь
  • 64 сообщений
  • Nick:Wanket
  • WoT Server:RU (Русский)
  • Skype: ivan.borisov2011
  • Город: Орел

Опубликовано 08 Август 2016 - 18:29

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


  • 2

#5 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 18:45

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


  • 0

#6 ktulho

ktulho
  • Premium Member
  • 4 365 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Август 2016 - 18:54

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

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


  • 0

#7 Wanket

Wanket
  • Пользователь
  • 64 сообщений
  • Nick:Wanket
  • WoT Server:RU (Русский)
  • Skype: ivan.borisov2011
  • Город: Орел

Опубликовано 08 Август 2016 - 18:56

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

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


  • 0

#8 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 19:11

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


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

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

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


  • 0

#9 ktulho

ktulho
  • Premium Member
  • 4 365 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Август 2016 - 19:16

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

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

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


  • 0

#10 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 19:29

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

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

 

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


  • 0

#11 ktulho

ktulho
  • Premium Member
  • 4 365 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Август 2016 - 19:31

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

#12 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 504 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 08 Август 2016 - 19:32

Почему???

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

#13 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 19:40

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

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

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

#14 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 504 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 08 Август 2016 - 19:54

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

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

#15 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 20:26

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

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


  • 0

#16 goodman

goodman
  • Premium Member
  • 3 560 сообщений
  • Город: Саратов

Опубликовано 08 Август 2016 - 21:06

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

#17 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 22:15

сколько оперативы в твоей машине?

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

 

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

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

 

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

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


Изменено: Pavel3333, 08 Август 2016 - 22:16

  • 0

#18 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 504 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 08 Август 2016 - 22:34

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

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

Изменено: SkepticalFox, 27 Май 2017 - 10:38

  • 0

#19 Pavel3333

Pavel3333

    Няффко

  • Пользователь
  • 2 028 сообщений
  • Nick:Buffalo73rus
  • WoT Server:RU (Русский)
  • Skype: pavel.html
  • Город: Москва/Дмитров

Опубликовано 08 Август 2016 - 22:37

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

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

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

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


Изменено: Pavel3333, 08 Август 2016 - 22:41

  • -1

#20 SkepticalFox

SkepticalFox

    ShadowHunterRUS

  • Premium Member
  • 3 504 сообщений
  • Nick:SkepticalFox
  • WoT Server:RU (Русский)
  • Город: Moscow

Опубликовано 08 Август 2016 - 22:43

Почему?

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





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13