Как переменная типа bool хранится в памяти? (C ++) - PullRequest
7 голосов
/ 01 ноября 2011

bool test;

sizeof(test) = 1 при использовании VS 2010. Поскольку каждый тип данных C ++ должен быть адресуемым, переменная "test" bool составляет 8 бит (1 байт).

Мой вопрос заключается в том, что переменная «test» действительно занимает 1 байт в памяти?

Есть ли какой-либо навык реализации, который может заставить тип данных bool занимать только один бит?Если да, можете ли вы привести пример?

bool test1[32] (в VS 2010), int test2 (в VS 2010)

Do test1 и test2 занимают одно и то жепамять

Ответы [ 3 ]

9 голосов
/ 01 ноября 2011

Каждый элемент test1 должен быть адресуемым.Это означает, что test1 занимает не менее 32 байтов (а не бит).

Если вы хотите, чтобы несколько логических значений были сохранены в одной переменной, используйте std::bitset или std::vector<bool> (но имейте в виду, что последняя на самом деле не является вектором bools, это специализация, предназначенная для сохраненияпробел).

IIRC, C ++ 11 также определяет std::dynamic_bitset.

3 голосов
/ 01 ноября 2011

Мой вопрос заключается в том, занимает ли переменная «test» 1 байт в памяти?

Да, если sizeof(bool)==1.По сути, размер bool определяется реализацией, что означает, что он может быть больше 1 байта для определенного компилятора.

bool test1 [32] (в VS 2010), int test2 (в VS 2010)
Занимают ли test1 и test2 одну и ту же память?

То, что занимает каждый из них, можно узнать с помощью оператора sizeof.Вот для чего нужен оператор sizeof.Таким образом, test1 и test2 будут занимать sizeof(test1) и sizeof(test2) байтов соответственно.

2 голосов
/ 01 ноября 2011

Другая возможность иметь переменную в 1 бит - это поместить в структуру битового поля:

struct {
    int a:1;
    int b:1;
};
...