Ist Bitfield ein C-Konzept oder C++?Fragen über C-Bitfelder
Kann es nur innerhalb einer Struktur verwendet werden? An welchen anderen Orten können wir sie benutzen?
AFAIK, Bitfelder sind spezielle Strukturvariablen, die den Speicher nur für die spezifizierte Nr. Belegen. von Bits. Es ist nützlich beim Speichern von Speicher und sonst nichts. Bin ich richtig?
codierte ich ein kleines Programm, um die Nutzung von bitfields zu verstehen - aber ich denke, es ist nicht wie erwartet funktioniert. Ich erwarte, dass die Größe der unteren Struktur 1 + 4 + 2 = 7 Bytes ist (wenn man die Größe von unsigned int berücksichtigt, sind 4 Bytes auf meinem Rechner), aber zu meiner Überraschung stellt es sich heraus, dass es 12 Bytes (4 + 4 + 4) ist). Kann mir jemand wissen warum?
#include <stdio.h>
struct s{
unsigned int a:1;
unsigned int b;
unsigned int c:2;
};
int main()
{
printf("sizeof struct s = %d bytes \n",sizeof(struct s));
return 0;
}
OUTPUT:
sizeof struct s = 12 bytes
Zum Downvoter - welcher dieser Aussagen stimmen Sie nicht zu? –
+1: 'implementierungsabhängig' und 'Bitfelder vermeiden' sind der Schlüssel. –
Ich stimme hier in Bezug auf Speichereinsparungen teilweise nicht überein: Fühlen Sie sich frei, Bitfelder anzugeben, wo sie den Speicherbedarf einer Struktur reduzieren könnten. Aber versuchen Sie nie, klug mit ihnen zu sein, und siebenmal zählen Sie nie darauf, was der Compiler mit ihnen machen wird. – dmckee