Charakterystyka zmiennej
Pola bitowe są używane do wydajnego konsumpcji pamięci w taki sposób, abyśmy zarządzali naszą przestrzenią pamięci w gładko.
Może być również używany w strukturze i zjednoczeniu.
Jak wdrożyć pole bitowe w programie C
1 2 3 4 5 6 7 8 9 10 11 | Data struktury niepodpisany int d; niepodpisany int m; niepodpisany int y; ; |
Wyjaśnienie
Zmienna typu, „data”, bierze 12 bajtów na kompilator, który ma 32 bity na 64-bitowym kompilatorze, podczas gdy „data” bierze 6 bajtów na kompilator, który ma 16 bitów.
64 bity
D1 | ||
D | M | y |
22 | 1 | 2016 |
4 bajty | 4 bajty | 4 bajty |
= 12 bajtów |
32 bity
D1 | ||
D | M | y |
22 | 1 | 2016 |
2 bajty | 2 bajty | 2 bajty |
= 6 bajtów |
Jak zmniejszyć rozmiar zmiennej w programie
Przykład programowania 1
W tym przykładzie programowania zobaczymy, jaka ilość pamięci jest zużywana przez dowolny rodzaj zmiennej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #włączać Data struktury // Definiowanie typu danych zdefiniowanych przez użytkownika. niepodpisany int d; // Członek danych typu danych daty. niepodpisany int m; niepodpisany w t y; ; int main () Data struktury d1 = 22, 1, 2016; // Zmienna typu daty jest zadeklarowana i inicjowana. printf („Rozmiar D1 to %d”, rozmiar (d1)); powrót 0; |
Wyjście
Wyjaśnienie
Wartości daty i miesiąca są ustalone: data to 31, a miesiąc to 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 bitów) | (4 bity) |
Po poprzednim obliczeniu daty staramy się powiedzieć, że aby reprezentować maksymalny dzień w miesiącu (31), wymagane jest tylko 5 bitów pamięci z 4 bajtów lub 32 bitów. Tak samo jest również w przypadku liczenia miesięcy. Jest 12 miesięcy w roku. Aby reprezentować 12 w pamięci, potrzeba tylko 4 bitów z 4 bajtów lub 32 bitów. Zatem z tego przekonania jasno wynika, że reszta pamięci jest zmarnowana w przypadku dnia i miesiąca w dniu. W tej sytuacji pole bitowe pomaga nam rozwiązać problem.
Przykład programowania 2
W tym przykładzie programowania użyjemy pola bitowego do konsumpcji pamięci dla zmiennej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #włączać Data struktury // Definiowanie typu danych zdefiniowanych przez użytkownika. niepodpisany int d: 5; // Członek danych typu danych daty. niepodpisany int m: 4; // Używanie pola bitowego jako okrężnicy: niepodpisany int y; ; int main () Data struktury d1 = 22, 1, 2016; // Zmienna typu daty jest zadeklarowana i inicjowana. printf („Rozmiar D1 to %d”, rozmiar (d1)); powrót 0; |
Wyjście:
Wyjaśnienie
Wiemy, że wartość D wynosi zawsze od 1 do 31. Jeden rok zawiera 12 miesięcy. Tak więc wartość inicjalizacji zmiennej miesiąca, m, wynosi maksymalnie 12. Możemy poradzić sobie z dodatkową przestrzenią za pomocą pól bitowych.
Ulepszony przykład
Bajty z pojedynczą pamięcią [4 bajty] |
Blok pamięci jest tworzony wiele z 4 bajtów.
Zmienna D1 typu „data” bierze 8 bajtów na kompilator, podczas gdy liczba całkowita niepodpisana bierze 4 bajty.
Przykład programowania 3
Zobaczymy kolejny przykład zużycia pamięci bez użycia pola bitowego.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #włączać struct tm niepodpisane int HRS; niepodpisany int min; niepodpisany ints; ; int main () struct tm t = 11, 30, 10; // deklaracja zmiennej typu zdefiniowanego przez użytkownika. printf („Czas to %d: %d: %d \ n”, t.Hrs, t.Mennica.sec); printf („Rozmiar zegara = %bajtów.\ n ", sizeof (struct tm)); powrót 0; |
Wyjście
Wyjaśnienie
Po poprzednim obliczeniu daty staramy się powiedzieć, że aby przedstawić maksymalne sekundy w godzinach (60), wymagana jest tylko 6-bitowa pamięć z 4 bajtów lub 32 bitów. Tak samo jest również w przypadku liczenia minut. Jest 60 minut na godzinę. Aby reprezentować 60 w pamięci, potrzeba tylko 5 bitów z 4 bajtów lub 32 bitów. Z tego przekonania jasno wynika, że reszta pamięci jest zmarnowana w przypadku dnia i miesiąca na datę. Ten problem zostanie rozwiązany za pomocą pola bitowego.
Przykład programowania 4
Tutaj możemy zobaczyć kolejne zastosowanie pól bitowych.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #włączać struct tm niepodpisany int HRS: 8; niepodpisany int min: 10; Unsigned Int Sec: 10; ; int main () struct tm t = 11, 30, 10; // deklaracja zmiennej typu zdefiniowanego przez użytkownika. printf („Czas to %d: %d: %d \ n”, t.Hrs, t.Mennica.sec); printf („Rozmiar zegara = %bajtów.\ n ", sizeof (struct tm)); powrót 0; |
Wyjście
Wyjaśnienie
W tym przykładzie programowania używamy pola bitowego do konsumpcji pamięci. Jak widzimy z przykładu, użyjemy pola bit (:). W rezultacie zobaczymy z konsumpcji pamięci wyjściowej.
Wniosek
Z poprzedniej deklaracji widać, że musimy użyć pola bitowego, aby zarządzać złożonością przestrzeni w języku C. Pole bitowe pomaga nam usunąć dodatkową zmarnowaną przydział pamięci z pamięci w celu zarządzania złożonością przestrzeni. Musimy więc użyć pola bitowego w bardzo świadomy sposób, w którym jest to wymagane. W przeciwnym razie dane mogą zostać zmarnowane.