Strukturen (4/5)

Bitfelder

Um Speicherplatz zu sparen können sogenannte Bitfelder definiert werden. Diese haben eine feste Anzahl an Bits und können keine Werte annehmen, die durch mehr Bits repräsentiert werden. Bitfelder können vom Typ [[un]signed] int sein. In einer Struktur aufeinanderfolgende Bitfelder desselben Typs werden im Speicher wenn möglich direkt hintereinander abgespeichert. Bitfelder der Länge 0 bewirken, daß das nächste Bitfeld zu Beginn des nächsten Wortes abgespeichert wird (sog. alignment). Die Länge eines Wortes hängt vom verwendeten Computer ab. Der Vorteil ist eine meist verkürzte Zugriffszeit. Namenlose Bitfelder verbrauchen Speicherplatz, können aber nicht referenziert werden.

Pointer auf Bitfelder sind nicht gestattet. Ebenso sind statische Bitfelder verboten.

  struct bitfeld
  {
    unsigned int AX:16;    // 16-Bit Register
    unsigned int BL:8;     //  8-Bit Register
    unsigned int BH:8;     // dto.
    unsigned int b1:1;     // Boolean;
    unsigned int b1:2;     // dto.
    unsigned int dummy:0;  // nächstes Bitfeld zu Beginn eines Wortes
    unsigned int EX:16; 
    unsigned int   :8;     // Speicherlücke;
    unsigned int DH:8;
  };