Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] El uso de bits ahorra memoria?

Estas en el tema de El uso de bits ahorra memoria? en el foro de C/C++ en Foros del Web. Hoal a todos quería saber si usar una estructura con bits en verdad ahorra memoria, Lei en un libro de como programar en C, que ...
  #1 (permalink)  
Antiguo 23/03/2015, 10:38
Avatar de GumiCat  
Fecha de Ingreso: mayo-2014
Ubicación: Argentina
Mensajes: 16
Antigüedad: 10 años, 6 meses
Puntos: 0
Información El uso de bits ahorra memoria?

Hoal a todos quería saber si usar una estructura con bits en verdad ahorra memoria, Lei en un libro de como programar en C, que usando estructuras con bits se puede ahorrar espacio en programas donde esto es crucial.

Yo en mi programa tengo:

Código:
#include <stdio.h>

struct byte
{
	usingned int signo: 1; 
	unsigned int num: 8;
};


int main()
{
	struct byte numero;
	
	printf("%d", sizeof(numero));
	
	return 0;
}
Y me dice que ocupa 4 bytes, por lo que no sé si en verdad me ocupa 4 bytes o 9 bits, esa es mi duda
  #2 (permalink)  
Antiguo 23/03/2015, 17:08
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: El uso de bits ahorra memoria?

Los bit-fields adyacentes pueden empaquetarse juntos, aunque es una característica que depende de cada compilador. En tu ejemplo, signo y num se han empaquetado en el espacio de un solo unsigned int, y es por eso que sizeof(numero) devuelve 4 y no 8.

En
Código C:
Ver original
  1. struct Byte_1
  2. {
  3.     unsigned char signo : 1;
  4.     unsigned char num   : 7;
  5. };
signo y num pueden empaquetarse en un mismo Byte (unsigned char).

Y en
Código C:
Ver original
  1. struct Byte_2
  2. {
  3.     unsigned short signo : 1;
  4.     unsigned short num   : 7;
  5. };
signo y num pueden empaquetarse en dos Bytes (unsigned short).
  #3 (permalink)  
Antiguo 24/03/2015, 01:55
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 6 meses
Puntos: 73
Respuesta: El uso de bits ahorra memoria?

Eso depende del compilador. Algunos irán utilizando chars (8 bits) hasta cubrir el total de bits requeridos, aunque creo que lo normal es que vayan utilizando ints (32 bits, para un compilador de 32 bits). Para un compilador "normal" (para generar programas destinados a correr en un PC, por ejemplo Visual C o GCC) te da igual que lo hagan de uno u otro modo, dado que las variables siempre van a estar colocadas en direcciones de memoria que sean múltiplos de 4 (4 bytes = 32 bits) (en el caso de sistemas de 32 bits). Así, si la variable necesita solamente 1 byte, los otros 3 (hasta la siguiente dirección múltiplo de 4) quedan desperdiciados.

El ahorro lo podrías tener con los antiguos sistemas de 8 y 16 bits, en los que la memoria era mucho más escasa, y, especialmente, en compiladores para microcontroladores (por ejemplo, los Arduino o los PIC), donde la memoria es aún más escasa.

Etiquetas: bits, tamaño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:06.