riguardo le dimensioni...

il tipo bool è presente anche nel c con le stesse caratteristiche del c++.
Il tipo _Bool è stato creato per aumentare la stabilità e portabilità del codice.
In primis ora si può scrivere codice quale:

if ( true == var )

mentre prima non si poteva, o meglio non era uno standard e perciò quel frammento di codice non era sicuro e perciò bisognava scrivere

if ( true == !(!var) )

Lo standard prevede anche che la dimensione di tale tipo sia di un bit, questo è una grande caratteristica ad esempio per essere usato per i flags.
Infatti essendo o 0 o 1 si ha la certezza che

flags = bool_activate << 1;

funzioni sempre.
Non solo, ma il compilatore potrebbe ottimizzare una struttura unendo più bool in un unico byte

struct a{
    bool a;
    bool b;
}

su architetture a 8 bit potrebbe avere dimensioni di solo un byte anziché 2 e in una a 32 bit un 4 byte anziché 8.Questo però dipende dal compilatore che si sta usando.