Fihop
Fihop

Reputation: 3177

How a bool type variable is stored in memory? (C++)

bool test;

sizeof(test) = 1 if using VS 2010. Since every C++ data type must be addressable, the "test" bool variable is 8-bits(1 byte).

My question is that does the "test" variable really occupy 1 byte in memory?

Is there any implementation skill that can make the bool data type occupy only one bit? If yes, can you give me an example?

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

Do test1 and test2 occupy the same memory?

Upvotes: 7

Views: 11266

Answers (3)

Alexandre C.
Alexandre C.

Reputation: 56956

Every element of test1 must be addressable. This implies that array test1 (that was created using bool test1[32]) takes at least 32 bytes (1 byte per element).

If you want multiple boolean values to be stored in a single variable, use std::bitset or std::vector<bool> (but be aware that the latter is not really a vector of bools, it is a specialization designed to save space).

IIRC, C++11 also defines std::dynamic_bitset.

Upvotes: 10

Michael Krelin - hacker
Michael Krelin - hacker

Reputation: 143051

Another possibility to have a variable of 1 bit, is to put into a bitfield struct:

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

Upvotes: 2

Sarfaraz Nawaz
Sarfaraz Nawaz

Reputation: 361302

My question is that does the "test" variable really occupy 1 byte in memory?

Yes, if sizeof(bool)==1 . Basically, the sizeof bool is implementation-defined, which means it could be greater than 1 byte for certain compiler.

bool test1[32](in VS 2010), int test2(in VS 2010)
Does test1 and test2 occupy the same memory?

What each of them occupy can be known by using sizeof operator. That is what sizeof operator is for. So test1 and test2 will occupy sizeof(test1) and sizeof(test2) bytes respectively.

Upvotes: 3

Related Questions