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

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

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

Есть массив

bool mas[8];

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

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



Просто я так подумал. В bool нули и единицы. По идее его можно определит одним битом. Но комп не может хранить инфу такого объёма. Минимум байт. Но вот 8 bool -- тут как быть? Можно всё в один байт утрамбовать или каждая переменная по любому по байту будет? Али как?
 
Если ты умный (комп не может хранить инфу такого объёма), то сам сделаешь программу которая тебе это покажет, уж размер переменной определять учат с самых первых уроках по си.
 
Массив из 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
 
В 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 байт памяти.
 
Массив из 8 элементов типа bool в памяти займет не менее 1 байта. Каждый элемент bool по стандарту C++ занимает 1 байт, независимо от его значения (true или false). Таким образом, массив из 8 элементов будет занимать 8 бит, что равно 1 байту.

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