Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Сколько памяти занимает тип bool |
Автор: 88andrey 23.4.2007, 10:55 |
1 – байт или 1 – бит. |
Автор: Fazil6 23.4.2007, 10:58 | ||
1 байт. Меньше он и не может быть. Хотя в контейнере vector<bool> хранится в битах |
Автор: HappyLife 23.4.2007, 11:25 |
Fazil6, Да не совсем.... Такой контейнер неедопустим, потому что будет храниться в байтах... bitset вот в нем в битах. |
Автор: Fazil6 23.4.2007, 11:37 | ||
не совсем понимаю почему недопустимо vector<bool> , хотя это и не контейнер STL (тут согласен, что я неудачно выразился). Обычно в vector<bool> элементы хранятя как раз в битах. vector<bool> по стандарту вполне допустим, хотя и рекомендуется избегать такой конструкции. |
Автор: HappyLife 23.4.2007, 11:41 | ||
zkv, да, попутал рамсы. сорри. Фишка в том, что адресацию, невозможно создать к элементам. и сделать
|
Автор: NightmareZ 23.4.2007, 12:48 | ||||
Тебе нравится говорить очевидные общеизвестные вещи, особенно, когда никто их не спрашивает? |
Автор: HappyLife 23.4.2007, 12:57 |
NightmareZ, нет не особо. но мне просто главнее не задавать бессмысленных вопросов. нежели дать бессмысленный ответ.... наверное так. |
Автор: vinter 23.4.2007, 14:14 | ||
а ты че наезжаешь? не нравится сиди спокойно, форум не для тебя одного |
Автор: betal 23.4.2007, 15:23 |
![]() |
Автор: Earnest 23.4.2007, 15:51 |
Все, ребята, не заводитесь. |
Автор: _ace_ 23.4.2007, 18:24 |
88andrey конечно 1 бит то есть 8 микробит |
Автор: JackYF 23.4.2007, 18:33 | ||
_ace_, ну это уже черезчур. Между прочим, может занимать и 1 бит... и даже не в стандартных контейнерах:
Извинился бы ты... Добавлено через 1 минуту и 7 секунд кстати, если подходить формально, то если бы бит делился, то в нем было бы 10^(-6) микробит. |
Автор: archimed7592 23.4.2007, 18:37 | ||||
люди пишут так:
|
Автор: Earnest 23.4.2007, 18:41 |
Это шутка, надо полагать ![]() JackYF, в твоем примере это вовсе не бул, хотя ты видишь это слово. Так же как второй элемент битовой структуры - вовсе не unsigned short... |
Автор: JackYF 23.4.2007, 18:56 | ||
Ну с unsigned short - да, здесь понятно. Это я так, чтобы до восьми бит добить... С bool - да, тут тоже, если формально подходить, то не bool. Но вот функции свои - хранить/отдавать true/false он делает исправно. sizeof(bool)==1, тут понятно. Просто можно заюзать и более плотную схему, только и всего. |
Автор: Mayk 23.4.2007, 18:59 | ||
|
Автор: Earnest 23.4.2007, 19:19 | ||
Ну так я ведь могу написать с использованием флагов что-то вроде return (my_flags & boolFlag) != 0. Ровно то же самое и компилятор делает, только сам, за что спасибо. Mayk, точно, вот вроде помнила, что не обязательно sizeof (bool) == 1, но сомневалась, потому как давно читала... Ясно только что не 8 микробит... ![]() |
Автор: JackYF 23.4.2007, 19:30 | ||
Да, конечно. Но, в принцие, это и есть назначение булевской переменной ![]() Ну, со стандартом спорить глупо. Но хотел бы я посмотреть на компилятор, у которого sizeof(bool)>1. ![]() |
Автор: betal 23.4.2007, 20:40 |
![]() ![]() |
Автор: Любитель 23.4.2007, 23:10 | ||
MS VC++/CLI. Это, конечно, не совсем плюсы - но всё-таки. Суть в том, что вполне реально.
Во-первых - не минус явно. ![]() ![]() |
Автор: Dude03 24.4.2007, 12:38 |
4 байта=) В стеке=). Вопрос уже неоднократно поднимался на форуме. Мой совет: заюзайте возможность компилятора генерить ассемблерный листинг и загляните в него. И сразу станет легче жить=) |
Автор: JackYF 24.4.2007, 16:40 | ||
Ну да - естественно, +. Ну вообще тут спорный вопрос. Компьютерные килобайты, мегабайты, гигабайты, терабайты и экзабайты переопределены... А вообще микро - 10^-6... Так что тут еще неизвестно ![]() Ну, переменные не всегда в стеке лежат ![]() Не-е-е... ![]()
Хм... мдя. Ужас. А если еще похохмить, то компилятора ms vc++/cli я таки еще не видел ![]() |
Автор: Любитель 28.4.2007, 17:01 |
Почему? Я в названии ошибся (если да - поправь, я не знал)? Компилер, строго говоря, там один - cl.exe, разные ключики... |
Автор: JackYF 28.4.2007, 17:17 | ||
Э ![]() Я не видел этого компилятора. Ну то есть он есть, но я его не видел ![]() Это же хохма была ![]() |
Автор: Любитель 28.4.2007, 18:01 |
Вот я и предложил посмотреть на него ![]() |
Автор: JackYF 28.4.2007, 18:06 | ||
Кстати... а зачем ему sizeof(bool) > 1? памяти, что ли, под true/false не хватает? ![]() |
Автор: Любитель 28.4.2007, 18:09 |
Оптимизация скорости в ВМ, если не ошибаюсь. Впрочем, вопрос к дотнетчикам. К тому же там уже была такая тема (по шарпу, но какая разница?). |
Автор: Sartorius 28.4.2007, 18:12 | ||
на БОРе как то такой код видел из реального проекта между прочим ![]()
Так что одного байта не всегда хватает... ![]() |
Автор: Любитель 28.4.2007, 18:16 |
Sartorius, не понял. Если bFlag типа bool, то ToString (если я жутко не туплю) возвращает его строковое представление - "true/false". Код правда тупой до ужаса (или в этом суть ![]() |
Автор: Sartorius 28.4.2007, 18:18 | ||
|
Автор: JackYF 28.4.2007, 18:22 | ||
Да, было похожее. Впрочем, в этом случае программисту надо сделать remount hands, а если не поможет, то увольняться ![]() |
Автор: Любитель 28.4.2007, 18:26 |
Даа. Вот зя это можно пальцы ломать (я не против), а то вот в соседнем топике зверствуют... Впрочем, мож у них такие шутки своеобразные (в виде такого кода)? |