Caractéristiques d'une variable
Les champs bits sont utilisés pour consommer efficacement la mémoire de telle manière que nous gérons notre espace mémoire de manière en douceur.
Il peut également être utilisé dans la structure et l'union.
Comment implémenter un peu de champ dans le programme C
1 2 3 4 5 6 7 8 9 dix 11 | date de structure ints non signé; intm non signé; non signé dans; ; |
Explication
La variable de type, «Date», prend 12 octets sur un compilateur qui sont de 32 bits sur un compilateur 64 bits, tandis que «Date» prend 6 octets sur un compilateur qui sont de 16 bits.
64 bits
d1 | ||
d | m | y |
22 | 1 | 2016 |
4 octets | 4 octets | 4 octets |
= 12 octets |
32 bits
d1 | ||
d | m | y |
22 | 1 | 2016 |
2 octets | 2 octets | 2 octets |
= 6 octets |
Comment réduire la taille d'une variable dans un programme
Exemple de programmation 1
Dans cet exemple de programmation, nous verrons quelle quantité de mémoire est consommée par tout type de variable.
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #inclure Date de structure // Définition du type de données défini par l'utilisateur. ints non signé; // membre de données du type de données de date. intm non signé; non signé en t y; ; int main () Date de structure D1 = 22, 1, 2016; // La variable de type date est déclarée et initialisée. printf ("taille de d1 est% d", sizeof (d1)); retour 0; |
Sortir
Explication
Les valeurs de la date et du mois sont fixes: la date est de 31, et le mois est 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) |
À partir du calcul précédent de la date, nous essayons de dire que pour représenter une journée maximale en un mois (31), seulement 5 bits de mémoire sont requis sur 4 octets ou 32 bits. C'est la même chose aussi dans le cas du comptage des mois. Il y a 12 mois par an. Pour représenter 12 dans la mémoire, il ne prend que 4 bits sur 4 octets ou 32 bits. Ainsi, il ressort clairement de cette perception que le reste de la mémoire est gaspillé en cas de jour et de mois à une date. Dans cette situation, le champ Bit nous aide à résoudre le problème.
Exemple de programmation 2
Dans cet exemple de programmation, nous utiliserons le champ Bit pour consommer de la mémoire pour la variable.
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #inclure Date de structure // Définition du type de données défini par l'utilisateur. Int d: 5 non signé; // membre de données du type de données de date. Int m: 4 non signé; // Utilisation de Bit Field comme côlon: non signé dans; ; int main () Date de structure D1 = 22, 1, 2016; // La variable de type date est déclarée et initialisée. printf ("taille de d1 est% d", sizeof (d1)); retour 0; |
Sortir:
Explication
Nous savons que la valeur de D est toujours de 1 à 31. Un an contient 12 mois. Ainsi, la valeur d'initialisation de la variable du mois, m, est un maximum de 12. Nous pouvons gérer l'espace supplémentaire à l'aide de champs de bits.
Exemple amélioré
Octets de mémoire unique [4 octets] |
Le bloc de mémoire est créé plusieurs de 4 octets.
La variable D1 de type «date» prend 8 octets sur un compilateur, tandis qu'un entier non signé prend 4 octets.
Exemple de programmation 3
Nous verrons un autre exemple de consommation de mémoire sans utiliser un champ.
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #inclure struct tm non signé int hrs; non signé int min; non signé int sec; ; int main () struct tm t = 11, 30, 10; // Déclaration d'une variable de type défini par l'utilisateur. printf ("Le temps est% d:% d:% d \ n", t.HRS, T.menthe.sec); printf ("La taille de l'horloge =% ld octets.\ n ", sizeof (struct tm)); retour 0; |
Sortir
Explication
À partir du calcul précédent de la date, nous essayons de dire que pour représenter les secondes maximales en une heure (60), seule une mémoire 6 bits est requise sur 4 octets ou 32 bits. C'est la même chose aussi en cas de comptage des minutes. Il y a 60 minutes dans une heure. Pour représenter 60 dans la mémoire, il ne prend que 5 bits sur 4 octets ou 32 bits. Donc, il ressort clairement de cette perception que le reste de la mémoire est gaspillé en cas de jour et de mois à une date. Ce problème sera résolu à l'aide du champ Bit.
Exemple de programmation 4
Ici, nous pouvons voir une autre application de champs bits.
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #inclure struct tm non signé int h: 8; Unsigned int min: 10; non signé int sec: 10; ; int main() struct tm t = 11, 30, 10; // Déclaration d'une variable de type défini par l'utilisateur. printf ("Le temps est% d:% d:% d \ n", t.HRS, T.menthe.sec); printf ("La taille de l'horloge =% ld octets.\ n ", sizeof (struct tm)); retour 0; |
Sortir
Explication
Dans cet exemple de programmation, nous utilisons un champ de bits pour consommer de la mémoire. Comme nous le voyons à partir de l'exemple, nous utiliserons le champ Bit (:) après avoir déclaré chaque membre de données du type de données Time, en essayant de consommer des bits dans un emplacement de mémoire. En conséquence, nous verrons dans la mémoire de sortie est consommée.
Conclusion
D'après la déclaration précédente, il est évident que nous devons utiliser le champ Bit pour gérer la complexité de l'espace dans la langue C. Le champ Bit nous aide à supprimer l'allocation de mémoire gaspillée supplémentaire de la mémoire pour gérer la complexité de l'espace. Donc, nous devons utiliser le champ Bit d'une manière très consciente où il est nécessaire. Sinon, les données peuvent être gaspillées.