Tag Archive for Bool

Wissenswert: Boolean und die Größe

Jeder kennt es, jeder benutzt es und viele erschrecken sich, wenn sie merken wieviel Speicher eigentlich eine boolean Variable verwendet.
Ein Boolean kann 2 Status annehmen, True oder False, 1 oder 0. Da denkt man eigentlich das ein Bit völlig ausreichen würde oder wenn man in der kleinsten Einheit in vielen Programmiersprachen ausgeht, einem Byte.
Doch auf normalen Rechnern wird für einen boolean entweder 32 Bit oder 64 Bit verwendet, je nach Architektur. Das heißt ein boolean verwendet 4 oder 8 Byte! Begründet wird dies mit der besseren/schnelleren Verwendbarkeit der Variable im CPU.

Jetzt werden einige Sagen, wenn ich sizeof(bool) ausgeben lasse, kommt dort 1, also ein Byte. Das ist soweit richtig, da C# einen boolean wie ein byte handhabt, doch wenn man sich einmal die Größe einer boolean Variable mit Marshal.SizeOf anzeigen lässt, steht bei 32 Bit Systemen dort 4.

1
2
bool test = true;
Marshal.SizeOf(test);
bool test = true;
Marshal.SizeOf(test);

Der Unterschied hier ist, das sizeof(bool) die C# Variante der Größe wiedergibt und Marshal.SizeOf die Unmanaged Größe angibt. Demnach kann man davon ausgehen, das intern ein C# Boolean auch als 4/8 Byte gespeichert wird.

Auch Wikipedia sagt zu diesem Thema:

[...]Aus technischen Gründen wird jedoch in der Regel eine andere Repräsentation gewählt, meist abhängig von der Wortbreite des konkreten Systems.[...]
Quelle: Wikipedia

Daher muss man sich Gedanken machen, wenn es um die Größe von z.b. einem struct geht, ob man nicht lieber eine byte Variable verwendet. Dies ist zwar nicht so sicher da man mehr als nur 2 Status darin speichern kann, doch spart es recht viel Speicher. Und wenn man oft structs hin und her kopieren muss, oder neue Instanzen erstellen muss, kann das schonmal perfomance fressen.