Вопрос про язык программирования c++. bool*. - Вопросы по С+
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Вопрос про язык программирования c++. bool*.

Регистрация
6 Ноя 2012
Сообщения
75
Репутация
0
Спасибо
0
Монет
0
Сколько в (оперативной) памяти компьютера будет занимать массив типа bool?

Допустим железо x86_64, ОС и программа тоже.

Есть массив

bool mas[8];

Сколько он будет весить? : байт, 8 байт или другое количество байт.

У меня Линукс, если это вообще на что-то влияет.



Просто я так подумал. В bool нули и единицы. По идее его можно определит одним битом. Но комп не может хранить инфу такого объёма. Минимум байт. Но вот 8 bool -- тут как быть? Можно всё в один байт утрамбовать или каждая переменная по любому по байту будет? Али как?
 
Регистрация
28 Июл 2013
Сообщения
96
Репутация
0
Спасибо
0
Монет
0
Если ты умный (комп не может хранить инфу такого объёма), то сам сделаешь программу которая тебе это покажет, уж размер переменной определять учат с самых первых уроках по си.
 
Регистрация
18 Июл 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
Массив из 8 переменных типа bool в ОЗУ занимает 8 байт. А что значит можно ли его утрамбовать и что комп не может хранить единицу такого объёма? Так как раз и делается! Если надо, например, записать информацию о простоте натуральных чисел от 1 до 2³²-1=4294967295 включительно, то сколько всего её потребуется? Не четыре же с лишним миллиарда байт, а где-то в 8 раз меньше, причём как раз потому, что в байте 8 бит! Каждый бит информации не надо хранить отдельно, а наоборот нужно упаковывать хранимые биты в числа, например, типа unsigned long int.
Пишем такой код: #include
#include
#include
using namespace std;
unsigned long *a, b[32], c[32];
void fal(unsigned long x)
{ a[x >> 5] &= c[x & 31]; }
unsigned bit(unsigned long x)
{ return a[x >> 5] & b[x & 31]; }
int main()
{ unsigned long i, j, k, l, m,
n = 4294967295, N, t = time(nullptr);
i = 1; b[0] = i; c[0] = ~i; for (j = 1; j < 32; j++)
{ i
 
Регистрация
8 Сен 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
В C++ тип bool занимает 1 байт памяти. Это связано с тем, что, хотя булево значение может быть представлено одним битом (0 или 1), наименьшей единицей адресуемой памяти в типичной компьютерной системе является байт.

Так, в массиве bool mas[8]; общее использование памяти составит 8 байт (по 1 байту на элемент). Не имеет значения, какая у вас операционная система, поскольку это вопрос, зависящий от аппаратного обеспечения и языка программирования.

Что касается кода для проверки этого, вы можете использовать оператор sizeof в C++ для определения размера объекта в байтах:#include &lt;iostream&gt;
using namespace std;

int main() {
bool mas[8];
cout &lt;&lt; sizeof(mas) &lt;&lt; endl;
return 0;
}
Этот код выведет 8, подтверждая, что массив bool mas[8] занимает 8 байт памяти.
 
Регистрация
17 Сен 2013
Сообщения
91
Репутация
0
Спасибо
0
Монет
0
Массив из 8 элементов типа bool в памяти займет не менее 1 байта. Каждый элемент bool по стандарту C++ занимает 1 байт, независимо от его значения (true или false). Таким образом, массив из 8 элементов будет занимать 8 бит, что равно 1 байту.

Важно отметить, что хранение отдельных битов в памяти возможно, но для доступа к отдельным битам в массиве типа bool потребуется специальный код, который расшифровывает, какой бит в каком байте соответствует элементу массива. Обычно, для таких целей используется библиотека bitset, которая позволяет работать с отдельными битами в памяти как с элементами массива.
 
Сверху Снизу