Сколько в (оперативной) памяти компьютера будет занимать массив типа bool?
Допустим железо x86_64, ОС и программа тоже.
Есть массив
bool mas[8];
Сколько он будет весить? : байт, 8 байт или другое количество байт.
У меня Линукс, если это вообще на что-то влияет.
Просто я так подумал. В bool нули и единицы. По идее его можно определит одним битом. Но комп не может хранить инфу такого объёма. Минимум байт. Но вот 8 bool -- тут как быть? Можно всё в один байт утрамбовать или каждая переменная по любому по байту будет? Али как?
C/C++
Вопрос про язык программирования C++. 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
bool mas[8]; займет 8 байт, как уже написали. Если хочешь держать булевские биты в битах, используй тип bitset. Есть также битовые поля в структурах.
Если ты умный (комп не может хранить инфу такого объёма), то сам сделаешь программу которая тебе это покажет, уж размер переменной определять учат с самых первых уроках по си.
Ответ дает язык Си - нет такого типа "bool". А если все утрамбовать в один байт то выйдет char а не 8 булов).
В C++ тип bool занимает 1 байт памяти. Это связано с тем, что, хотя булево значение может быть представлено одним битом (0 или 1), наименьшей единицей адресуемой памяти в типичной компьютерной системе является байт.
Так, в массиве bool mas[8]; общее использование памяти составит 8 байт (по 1 байту на элемент). Не имеет значения, какая у вас операционная система, поскольку это вопрос, зависящий от аппаратного обеспечения и языка программирования.
Что касается кода для проверки этого, вы можете использовать оператор sizeof в C++ для определения размера объекта в байтах:#include <iostream>
using namespace std;
int main() {
bool mas[8];
cout << sizeof(mas) << endl;
return 0;
}
Этот код выведет 8, подтверждая, что массив bool mas[8] занимает 8 байт памяти.
Так, в массиве bool mas[8]; общее использование памяти составит 8 байт (по 1 байту на элемент). Не имеет значения, какая у вас операционная система, поскольку это вопрос, зависящий от аппаратного обеспечения и языка программирования.
Что касается кода для проверки этого, вы можете использовать оператор sizeof в C++ для определения размера объекта в байтах:#include <iostream>
using namespace std;
int main() {
bool mas[8];
cout << sizeof(mas) << endl;
return 0;
}
Этот код выведет 8, подтверждая, что массив bool mas[8] занимает 8 байт памяти.
Владислав Васильков
Если не сложно можешь сделать лучшим ответом
Михаил Романенко
Норм, но я бы сделал массив из нечётного числа элементов, чтобы проверить выравнивание. А так - да, 1 бул = 1 байт.
Массив из 8 элементов типа bool в памяти займет не менее 1 байта. Каждый элемент bool по стандарту C++ занимает 1 байт, независимо от его значения (true или false). Таким образом, массив из 8 элементов будет занимать 8 бит, что равно 1 байту.
Важно отметить, что хранение отдельных битов в памяти возможно, но для доступа к отдельным битам в массиве типа bool потребуется специальный код, который расшифровывает, какой бит в каком байте соответствует элементу массива. Обычно, для таких целей используется библиотека bitset, которая позволяет работать с отдельными битами в памяти как с элементами массива.
Важно отметить, что хранение отдельных битов в памяти возможно, но для доступа к отдельным битам в массиве типа bool потребуется специальный код, который расшифровывает, какой бит в каком байте соответствует элементу массива. Обычно, для таких целей используется библиотека bitset, которая позволяет работать с отдельными битами в памяти как с элементами массива.
Михаил Романенко
ChatGPT?
Похожие вопросы
- Что такое #include <iostream>, std using namespace std В языке программирования C++?
- Язык программирования c++
- Нормальный ли язык программирования C для новичка ,что бы в дальнейшем перейти на C# ,C++,И в чем различие между ними?
- Стоит ли выбирать язык программирования c++ или лучше учить java. Требуется ли для этого языка хорошо знать математику?
- Помогите с языком программирования C++
- Написать программу на языке программирования C++
- Задача на языке программирования C#
- Задача на языке программирования C++
- Задача по языку программированию C++
- За сколько вы выучили язык программирования C++?
И Эратосфеном обычно проверяют до миллиона, а дальше - другая кухня.
Но работает шустро, 203 секунды для такой костыльной реализации (если переделать на 64-битные множества, то 98 сек, а с удалением признаков для чётных чисел - 24 сек, и памяти в 2 раза меньше. Умножения, деления, проверка чётных чисел на простоту (даже хранение их признаков), лишние операции по дёрганью битов туда-сюда... можно много всего вычистить. :-)
Но, может быть, когда-то потом пойму со временем.