Características de una variable
Los campos de bit se utilizan para consumir memoria de manera eficiente de tal manera que administramos nuestro espacio de memoria de manera suave.
Se puede usar en estructura y unión también.
Cómo implementar un campo un poco en el programa C
1 2 3 4 5 6 7 8 9 10 11 | Fecha de estructura sin firmar int d; Unsigned int m; Unsigned int y; ; |
Explicación
La variable de tipo, "Fecha", toma 12 bytes en un compilador que tiene 32 bits en un compilador de 64 bits, mientras que "Fecha" toma 6 bytes en un compilador que son de 16 bits.
64 bits
D1 | ||
d | metro | Y |
22 | 1 | 2016 |
4 bytes | 4 bytes | 4 bytes |
= 12 bytes |
32 bits
D1 | ||
d | metro | Y |
22 | 1 | 2016 |
2 bytes | 2 bytes | 2 bytes |
= 6 bytes |
Cómo reducir el tamaño de una variable en un programa
Programación Ejemplo 1
En este ejemplo de programación, veremos qué cantidad de memoria consume cualquier tipo de variable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 | #incluir Fecha de estructura // Definición del tipo de datos definidos por el usuario. sin firmar int d; // Data Miembro de la fecha Tipo de datos. Unsigned int m; sin firmar en t y; ; int main () Fecha de estructura d1 = 22, 1, 2016; // La variable de tipo de fecha se declara e inicializa. printf ("El tamaño de D1 es %D", sizeOf (D1)); regresar 0; |
Producción
Explicación
Los valores de la fecha y el mes son fijos: la fecha es 31 y el mes es 12.
2 | 31 |
2 | 15-2 |
2 | 7-1 |
2 | 3-1 |
1-1 | |
2 | 12 |
2 | 6-0 |
2 | 3-0 |
1-1 | |
11111 1100 | 1100 |
(5 bits) | (4 bits) |
A partir del cálculo anterior de la fecha, estamos tratando de decir que para representar un día máximo en un mes (31), solo se requieren 5 bits de memoria de 4 bytes o 32 bits. Es lo mismo en el caso de contar meses. Hay 12 meses en un año. Para representar 12 en la memoria, solo se necesitan 4 bits de 4 bytes o 32 bits. Por lo tanto, está claro a partir de esta percepción que el resto de la memoria se desperdicia en el caso del día y el mes en una fecha. En esta situación, el campo de bits nos ayuda a resolver el problema.
Programación Ejemplo 2
En este ejemplo de programación, usaremos el campo Bit para consumir memoria para la variable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 | #incluir Fecha de estructura // Definición del tipo de datos definidos por el usuario. Unsigned int d: 5; // Data Miembro de la fecha Tipo de datos. Unsigned int m: 4; // Usando el campo de bit como colon: Unsigned int y; ; int main () Fecha de estructura d1 = 22, 1, 2016; // La variable de tipo de fecha se declara e inicializa. printf ("El tamaño de D1 es %D", sizeOf (D1)); regresar 0; |
Producción:
Explicación
Sabemos que el valor de D es siempre del 1 al 31. Un año contiene 12 meses. Entonces, el valor de inicialización de la variable mes, M, es un máximo de 12. Podemos manejar el espacio adicional con la ayuda de los campos de bits.
Ejemplo mejorado
Bytes de memoria individual [4 bytes] |
El bloque de memoria se crea múltiples de 4 bytes.
La variable D1 de tipo "fecha" toma 8 bytes en un compilador, mientras que un entero sin firmar toma 4 bytes.
Programación Ejemplo 3
Veremos otro ejemplo de consumo de memoria sin usar un campo de bits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 26 27 | #incluir estructura tm Unsigned int hrs; Unsigned int min; Unsigned int Sec; ; int main () struct tm t = 11, 30, 10; // Declaración de una variable de tipo definido por el usuario. printf ("El tiempo es %d: %d: %d \ n", t.Hrs, t.menta.sec); printf ("El tamaño de reloj = %ld bytes.\ n ", sizeof (struct tm)); regresar 0; |
Producción
Explicación
A partir del cálculo anterior de la fecha, estamos tratando de decir que para representar los segundos máximos en una hora (60), solo se requiere una memoria de 6 bits de 4 bytes o 32 bits. Es lo mismo en el caso de contar las actas. Hay 60 minutos en una hora. Para representar 60 en la memoria, solo toma 5 bits de 4 bytes o 32 bits. Entonces, está claro a partir de esta percepción que el resto de la memoria se desperdicia en el caso del día y el mes en una fecha. Este problema se resolverá con la ayuda del campo de bits.
Programación Ejemplo 4
Aquí podemos ver otra aplicación de campos de bits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 26 27 | #incluir estructura tm Unsigned int hrs: 8; Unsigned int min: 10; Unsigned int Sec: 10; ; int main () struct tm t = 11, 30, 10; // Declaración de una variable de tipo definido por el usuario. printf ("El tiempo es %d: %d: %d \ n", t.Hrs, t.menta.sec); printf ("El tamaño de reloj = %ld bytes.\ n ", sizeof (struct tm)); regresar 0; |
Producción
Explicación
En este ejemplo de programación, usamos el campo Bit para consumir memoria. Como vemos en el ejemplo, usaremos el campo Bit (:) Después de declarar cada miembro de datos del tipo de datos de tiempo, intentando consumir bits en una ubicación de memoria. Como resultado, veremos que se consume la memoria de salida.
Conclusión
De la declaración anterior, es evidente que tenemos que usar el campo Bit para administrar la complejidad del espacio en el idioma C. Bit Field nos ayuda a eliminar la asignación de memoria adicional de desperdicio de la memoria para administrar la complejidad del espacio. Entonces, debemos usar el campo Bit de una manera muy consciente donde se requiere. De lo contrario, los datos pueden desperdiciarse.