Eigenschaften einer Variablen
Bit -Felder werden verwendet, um den Speicher so effizient zu konsumieren, dass wir unseren Speicherplatz reibungslos verwalten.
Es kann auch in Struktur und Vereinigung verwendet werden.
So implementieren Sie ein Bitfeld im C -Programm
1 2 3 4 5 6 7 8 9 10 11 | Strukturdatum nicht signiert int d; nicht signiert int m; nicht signiert int y; ; |
Erläuterung
Die Variable des Typs, „Datum“, nimmt 12 Bytes für einen Compiler auf, der 32 Bit eines 64-Bit.
64 Bit
D1 | ||
D | M | y |
22 | 1 | 2016 |
4 Bytes | 4 Bytes | 4 Bytes |
= 12 Bytes |
32 Bit
D1 | ||
D | M | y |
22 | 1 | 2016 |
2 Bytes | 2 Bytes | 2 Bytes |
= 6 Bytes |
So reduzieren Sie die Größe einer Variablen in einem Programm
Programmierbeispiel 1
In diesem Programm -Beispiel werden wir sehen, welche Speichermenge von jeder Art von Variable verbraucht wird.
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 | #enthalten Strukturdatum // Benutzungsdefinierte Datentyp definieren. nicht signiert int d; // Datenmitglied des Datumsartyps. nicht signiert int m; in t y nicht signiert; ; int main () Strukturdatum D1 = 22, 1, 2016; // Datumstypvariable wird deklariert und initialisiert. printf ("Größe von D1 ist %d", Größe (D1)); Rückkehr 0; |
Ausgang
Erläuterung
Die Werte von Datum und Monat sind festgelegt: Das Datum ist 31 und der Monat 12 beträgt 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) | (4 Bit) |
Aus der vorherigen Berechnung des Datums versuchen wir zu sagen, dass, um einen maximalen Tag in einem Monat (31) darzustellen. Es ist auch im Fall von Monaten das gleiche. Ein Jahr hat 12 Monate. Um 12 im Speicher darzustellen, dauert es nur 4 Bit aus 4 Bytes oder 32 Bits. Aus dieser Wahrnehmung geht hervor, dass der Rest des Gedächtnisses im Fall von Tag und Monat an einem Datum verschwendet wird. In dieser Situation hilft uns das Bit -Feld, das Problem zu lösen.
Programmierbeispiel 2
In diesem Programmierbeispiel werden wir das Bit -Feld verwenden, um Speicher für die Variable zu konsumieren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #enthalten Strukturdatum // Benutzungsdefinierte Datentyp definieren. nicht signiert int d: 5; // Datenmitglied des Datumsartyps. nicht signiert int m: 4; // Bitfeld als Dickdarm verwenden: nicht signiert int y; ; int main () Strukturdatum D1 = 22, 1, 2016; // Datumstypvariable wird deklariert und initialisiert. printf ("Größe von D1 ist %d", Größe (D1)); Rückkehr 0; |
Ausgang:
Erläuterung
Wir wissen, dass der Wert von D immer von 1 bis 31 liegt. Ein Jahr enthält 12 Monate. Der Initialisierungswert der Monatsvariablen m beträgt also maximal 12. Wir können den zusätzlichen Platz mit Hilfe von Bit Fields bewältigen.
Verbessertes Beispiel
Einzelspeicher -Bytes [4 Bytes] |
Speicherblock wird mehrere von 4 Bytes erstellt.
Die Variable d1 vom Typ „Datum“ nimmt 8 Bytes auf einen Compiler, während eine nicht signierte Ganzzahl 4 Bytes nimmt.
Programmierbeispiel 3
Wir werden ein weiteres Beispiel für den Speicherverbrauch sehen, ohne ein Bitfeld zu verwenden.
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 | #enthalten Struktur TM nicht signiert in HRs; nicht signiert int min; nicht signierte int sec; ; int main () Struktur tm t = 11, 30, 10; // Deklaration einer Variablen des benutzerdefinierten Typs. printf ("Die Zeit ist %d: %d: %d \ n", t.HRS, t.Minze.Sek.); printf ("die Größe der Uhr = %ld Bytes.\ n ", sizeof (struct tm)); Rückkehr 0; |
Ausgang
Erläuterung
Aus der vorherigen Berechnung des Datums versuchen wir zu sagen, dass, um die maximalen Sekunden in einer Stunde (60) darzustellen. Es ist auch das gleiche, wenn das Protokoll gezählt wird. Es sind 60 Minuten in einer Stunde. Um 60 im Speicher darzustellen, dauert es nur 5 Bit aus 4 Bytes oder 32 Bits. Aus dieser Wahrnehmung geht hervor, dass der Rest des Gedächtnisses im Fall von Tag und Monat an einem Datum verschwendet wird. Dieses Problem wird mit Hilfe des Bit -Feldes gelöst.
Programmierbeispiel 4
Hier sehen wir eine weitere Anwendung von Bit Fields.
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 | #enthalten Struktur TM nicht signiert in HRS: 8; nicht signiert int min: 10; nicht signierte int sec: 10; ; int main () Struktur tm t = 11, 30, 10; // Deklaration einer Variablen des benutzerdefinierten Typs. printf ("Die Zeit ist %d: %d: %d \ n", t.HRS, t.Minze.Sek.); printf ("die Größe der Uhr = %ld Bytes.\ n ", sizeof (struct tm)); Rückkehr 0; |
Ausgang
Erläuterung
In diesem Programm -Beispiel verwenden wir ein Bit -Feld, um den Speicher zu konsumieren. Wie wir aus dem Beispiel sehen, werden wir das Bit -Feld verwenden (:) Nachdem wir jedes Datenmitglied des Zeitdatentyps deklariert haben und versucht haben, Bits an einem Speicherort zu konsumieren. Infolgedessen werden wir aus dem Ausgangspeicher konsumiert werden.
Abschluss
Aus der vorherigen Erklärung ist es offensichtlich, dass wir das Bit -Feld verwenden müssen, um die Raumkomplexität in der C -Sprache zu verwalten. BIT -Feld hilft uns, zusätzliche Verschwendung von Speicherzuweisung aus dem Speicher zu entfernen, um die Speicherplatzkomplexität zu verwalten. Wir müssen also das Bit -Feld sehr bewusst verwenden, wo es erforderlich ist. Andernfalls können Daten verschwendet werden.