2011-11-01 13 views
6

prueba de bool;¿Cómo se almacena una variable de tipo bool en la memoria? (C++)

sizeof(test) = 1 si usa VS 2010. Dado que cada tipo de datos C++ debe ser direccionable, la variable bool "de prueba" es de 8 bits (1 byte).

Mi pregunta es si la variable "test" realmente ocupa 1 byte en la memoria?

¿Hay alguna habilidad de implementación que pueda hacer que el tipo de datos bool ocupen solo un bit? Si es así, ¿puedes darme un ejemplo?

bool test1[32] (en VS 2010), int test2 (en VS 2010)

Haz test1 y test2 ocupan la misma memoria?

+0

Quisiera hacer hincapié en que podría ser razonable para una plataforma para almacenar un valor lógico de 4 bytes en un 32- máquina de bits cuando hiper-optimiza la velocidad. Entonces, si tuviera 4 booleanos en una estructura, solo necesitaría una sola operación de ALU para verificar si un bool es verdadero, en comparación con dos cuando hay muchos booleanos empaquetados en una palabra de máquina. (Ofc una diferencia tan pequeña normalmente no es importante en absoluto). – Kos

+0

Algunos procesadores integrados en realidad tienen memoria direccionable de bits, de modo que la variable bool puede ocupar un bit. –

Respuesta

8

Cada elemento de test1 debe ser direccionable. Esto implica que test1 toma al menos 32 bytes (y no bits).

Si desea que varios valores booleanos a ser almacenados en una sola variable, utilice std::bitset o std::vector<bool> (pero tenga en cuenta que éste no es realmente un vector de Bools, es una especialización diseñada para ahorrar espacio).

IIRC, C++ 11 también define std::dynamic_bitset.

+3

probablemente signifique 32 bits, no bytes – Milan

+1

Si el procesador tiene unidades direccionables de 8 bits, eso implicaría que un 'bool' debe ocupar 1 octeto (byte), no 4 (32 bits). Y sí, todavía hay sistemas direccionables de 8 bits. El ARM9 puede acceder a valores de 8 o 32 bits. –

+2

@ entity64: 'test1' es una matriz de 32 objetos' bool' direccionables, que necesitarán (al menos) 32 bytes, uno por objeto. –

3

Mi pregunta es si la variable "prueba" realmente ocupa 1 byte en la memoria?

Sí, si sizeof(bool)==1. Básicamente, el tamaño de bool está definido por la implementación, lo que significa que podría ser mayor a 1 byte para cierto compilador.

test1 bool [32] (en VS 2010), test2 int (en VS 2010)
test1 y test2 Does ocupan la misma memoria?

Lo que cada uno de ellos ocupa puede conocerse mediante el uso del operador sizeof. Para eso es el operador sizeof. Por lo tanto, test1 y test2 ocuparán sizeof(test1) y sizeof(test2)bytes respectivamente.

2

Otra posibilidad de tener una variable de 1 bit, es poner en una estructura de campo de bits:

struct { 
    int a:1; 
    int b:1; 
}; 
+0

¿no debería ser 'unsigned a: 1'? – Xeo

+0

Bueno, estoy seguro de que lo usé de esta manera, aunque nunca lo he considerado como un entero con signo de 1 bit, por lo que tiene un punto aquí. –

Cuestiones relacionadas