008
26.01.2012, 23:25 Uhr
ao
(Operator)
|
Prozessoren speichern einen bool in der Regel nicht in einem Bit, sondern in einer größeren Einheit. Wie groß, ob ein Byte oder ein natives Wort (heutzutage meist 32 Bit), das ist dem Compiler überlassen, der C++-Standard hält sich da raus. Der Grund dafür ist, dass man lieber Speicher verschwendet als Geschwindigkeit verliert.
So, wenn der Programmierer eine lokale bool-Variable deklariert, reserviert der Compiler hierfür ein Stück Speicher, in dem zuvor irgendwas anderes gestanden hat, z.B. der Zahlenwert 42. Das Bitmuster dafür ist 0b00101010, was weder mit dem Muster für true (0b00000001) noch mit dem für false (0b00000000) übereinstimmt. Würde man verlangen, dass eine bool-Variable zu jeder Zeit nur true oder false sein darf, dann würde das heißen, dass der Compiler bool-Variablen initialisieren muss, um sicher zu gehen. Das würde dem Prinzip widersprechen, dass lokale Objekte nicht vom Compiler initialisiert werden.
Gründe hierfür: 1. Performance. Jede unnötige Initialisierung (unnötig deshalb, weil sie irgendwann später durch eine Zuweisung vom Programmierer überschrieben wird) kostet a) Laufzeit und vergrößert b) den Code um die Anweisungen zur Speicherung des Initial-Wertes.
2. Der Optimizer hat unter anderem die Aufgabe, Variablen, die nicht gleichzeitig, sondern nacheinander gebraucht werden, zusammenzulegen und damit Speicher zu sparen. Möglicherweise wird das durch Initialisierungszwang schwerer. |