7 Stimmen

Wie wird eine Variable vom Typ bool im Speicher abgelegt? (C++)

Bool test;

sizeof(test) = 1 wenn Sie VS 2010 verwenden. Da jeder C++-Datentyp adressierbar sein muss, ist die Variable "test" bool 8-Bit (1 Byte).

Meine Frage ist, ob die Variable "test" wirklich 1 Byte im Speicher belegt?

Gibt es irgendeine Implementierungsmöglichkeit, die den Datentyp bool nur mit ein Bit belegt? Wenn ja, können Sie mir ein Beispiel nennen?

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

Do test1 y test2 denselben Speicherplatz belegen?

10voto

Alexandre C. Punkte 53706

Jedes Element der test1 muss adressierbar sein. Dies bedeutet, dass Array test1 (die mit Hilfe von bool test1[32] ) benötigt mindestens 32 Bytes (1 Byte pro Element).

Wenn Sie möchten, dass mehrere boolesche Werte in einer einzigen Variablen gespeichert werden, verwenden Sie std::bitset ou std::vector<bool> (aber beachten Sie, dass letzteres nicht wirklich ein Vektor von bools ist, sondern eine Spezialisierung, um Platz zu sparen).

IIRC, C++11 definiert auch std::dynamic_bitset .

3voto

Nawaz Punkte 339767

Meine Frage ist, ob die Variable "test" wirklich 1 Byte im Speicher belegt?

Ja, wenn sizeof(bool)==1 . Grundsätzlich ist die Größe von bool implementierungsabhängig, was bedeutet, dass sie bei bestimmten Compilern größer als 1 Byte sein kann.

bool test1[32](in VS 2010), int test2(in VS 2010)
Belegen test1 und test2 denselben Speicherplatz?

Was jeder von ihnen belegt, kann mit dem Operator sizeof ermittelt werden. Dafür ist der sizeof-Operator da. Also test1 y test2 wird besetzen sizeof(test1) y sizeof(test2) Bytes beziehungsweise.

2voto

Eine andere Möglichkeit, eine Variable mit 1 Bit zu haben, besteht darin, sie in eine Bitfield-Struktur zu setzen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X