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?

 
			
			

 
					
					
					
						 Rispondi quotando
  Rispondi quotando neppure in assembler lo si può fare, ma credevo che con le variabili di tipo bool (o come minimo con gli array di tipo bool) pensasse il comilatore a usare | e & in questo modo:
 neppure in assembler lo si può fare, ma credevo che con le variabili di tipo bool (o come minimo con gli array di tipo bool) pensasse il comilatore a usare | e & in questo modo: ...
 ... 
 