Reputation: 3177
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
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
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
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