C/Visual C - duda sobre campos de bits

 
Vista:

duda sobre campos de bits

Publicado por izma (1 intervención) el 31/12/2002 00:23:35
Estoy haciendo un programilla en el que tengo una estructura con dos miembros. Supongamos:
struct ejemplo {
int miembro1;
int miembro2;
}

Tengo que construir una matriz de esta estructura con bastantes elementos. El caso es que miembro2 solo puede tener 3 valores distintos. Para ahorrar memoria, se me ocurrió hacer que miembro2 fuese un campo de 2 bits, con lo que quedaría:

struct ejemplo2 {
int miembro1;
unsigned miembro2 : 2;
}

He probado a ver que devuelve el sizeof(ejemplo) y sizeof(ejemplo2), y en los dos obtengo el mismo resultado, con lo que parece que no ahorro memoria (supongo esto tenga que ver con la arquitectura hardware del ordenador).
Mi pregunta es ¿hay otro método para ahorrar memoria?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda sobre campos de bits

Publicado por Endos (58 intervenciones) el 31/12/2002 12:22:33
Parece que no entiendes muy bien como funcionan los campos de bits.
El tamaño mínimo definible es de 1 byte (char), aunque uses solo algunos de sus bits. Si defines el campo de bits con datos "unsigned" seguirá ocupando como un "unsigned" aunque solo uses 1 bit del mismo. El ahorro se obtiene cuando guardas diferentes valores usando la totalidad de los bits del tipo que usas.

struct Bits
{
unsigned short Dato1: 4;
unsigned short Dato2: 6;
unsigned short Dato3: 2;
unsigned short Dato4: 4;
}

struct Bytes
{
unsigned short Dato1;
unsigned short Dato2;
unsigned short Dato3;
unsigned short Dato4;
}

En este caso Bits ocupa 2 bytes mientras que Bytes ocupa 8. Si te fijas, la suma total de los bits en "Bits" es 16, que son los disponibles en un tipo short. Si se gastara un solo bit más, ya pasaría a ocupar 4 bytes porque no cabría en los 16 bits que tenemos.

En cualquier forma, no se ahorra mucha memoria de esta forma. Lo típico para ahorrar memoria es evitar usar funciones que consumen mucho y hacer las tuyas propias lo más compactas posible.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar