Ho sempre pensato che una variabile di tipo bool occupasse esattamente 1 bit (1/8 di Bytes)...
Ma oggi mi sono ricreduto...
L'istruzione:
sizeof(bool);
restituisce 1... Sembra che una var booleana occupi quanto un char...![]()
Ho pensato che fosse un problema dovuto ad un'approssimazione, ma l'istruzione:
sizeof(bool[8]);
restituisce 8...
Mi sono accorto di ciò notando che il GnomeSystemMonitor segnalava che un mio programma con un'array bidimensionale di tipo bool di dimensione 4096*4096 pesava 16 MegaBytes in memoria, mentre non avrebbe dovuto usarne più di un paio!!!
E' anche questo un problema di "approssimazione" e in realtà il bool occupa un solo bit, o e' proprio che il bool occupa un char?
Il programma che stavo sviluppando e' una lavagnetta dove e' possibile colorare di nero un pixel cliccandoci (settandolo a TRUE) e renderlo bianco ricliccandoci (settarlo a FALSE)... Se volessi evitare che una cavolatina simile occupi 16 MB cosa devo fare? Gestire la lavagna come si faceva col C con gli operatori binary | e & ?
Ho compilato il programma con il g++... Qualcuno che ha qualche altro compilatore potrebbe dirmi se anche con il suo le variabili bool occupano quanto le variabili char?