Я нещодавно почав вчитися писати код, і в своїй книзі я натрапив на це питання. "Чому булеве значення зберігається як байт всередині комп'ютера, коли йому потрібен лише один біт?" може хтось пролити більше світла на це питання?
Я нещодавно почав вчитися писати код, і в своїй книзі я натрапив на це питання. "Чому булеве значення зберігається як байт всередині комп'ютера, коли йому потрібен лише один біт?" може хтось пролити більше світла на це питання?
Відповіді:
Це пов'язано з тим, що процесор може легко вирішити. Наприклад, на процесорі x86 є eax
(32 біт), ax
(16 біт) і ah
(8 біт), але немає єдиного бітового регістра. Тож для того, щоб він міг використовувати один біт, процесор повинен буде зробити читання / модифікацію / запис, щоб змінити значення. Якщо він зберігається як байт, для перевірки / зміни значення може бути використаний один читання або запис.
Крім того, можна поцікавитися, чи було б краще використовувати один біт проти повного байту, адже байт витратить 7 біт. Якщо простір не є обмеженням, слід перейти на байт, тому що, принаймні, x86, і я думаю, що інші, зазвичай є інструкція швидко встановити / очистити bool, який набагато швидше, ніж читання / зміна / запис одного біта . З особистих вимірювань я бачив, що метод читання / мод / запис на 5 разів повільніше, ніж метод єдиної інструкції.
Як пояснює @ barrem23 , дані повинні бути адресовані , а найменша межа звичайних архітектур - байт.
Але оскільки це питання позначено як c ++ , можливо, варто зазначити, що std::vector<bool>
він спеціалізований для того, щоб окремі елементи могли зберігатися як біти . Це дозволить заощадити місце, пожертвувавши деякою функціональністю (наприклад, std::search
може не працювати).