Wenn CHAR_BIT! = 8, welche Größe haben andere Typen?

8

Der C-Standard schreibt vor, dass sizeof(char) 1 ist, egal wie viele Bits tatsächlich benötigt werden.
Werden andere Datentypen in Form von Bytes oder Zeichen gemessen, falls diese nicht identisch sind? Unter der Annahme, dass CHAR_BIT 16 ist, wäre sizeof(int16_t) gleich 1 oder 2 ?

    
EOF 12.01.2014, 20:49
quelle

3 Antworten

12
  

Unter der Annahme, dass CHAR_BIT 16 ist, wäre sizeof (int16_t) gleich 1 oder 2

Größe der Objekte (wie von sizeof -Operator ergeben) wird in Bytes gemessen und ein Byte in C hat CHAR_BIT Bits.

  

(C99, 6.2.6.1p4) "Werte, die in Nicht-Bitfeldobjekten eines anderen Objekttyps gespeichert sind, bestehen aus nx CHAR_BIT-Bits, wobei n die Größe eines Objekts dieses Typs in Bytes angibt."

int16_t type, falls vorhanden, hat eine Breite von genau 16 Bit und keine Auffüllung. Das heißt, wenn CHAR_BIT == 16 , dann sizeof (int16_t) == 1

    
ouah 12.01.2014, 21:01
quelle
11

Wenn CHAR_BIT 16 ist und int16_t existiert, dann sizeof(int16_t) == 1 . Der int8_t -Typ würde nicht existieren, weil alles in C in Bytes messbar sein muss (und auf diesem System wäre jedes Byte 16 Bits ... deshalb ist der Begriff "Oktett" genauer als "Byte").

Es gibt DSP-Systeme und alte Supercomputer (frühere Cray-Systeme), wobei short , int , long alle dieselbe Größe haben, sagen wir 64 Bits.

    
Dietrich Epp 12.01.2014 20:50
quelle
2

Es gibt keine Beschränkungen für die Größen von Typen; Sie müssen nur in der Lage sein, einen Mindestbereich von -Werten darzustellen. Es ist beispielsweise völlig legitim, dass eine Plattform alle ihre grundlegenden Typen 64 Bit breit und sizeof von jedem von ihnen 1 hat.

Da Arrays einen zusammenhängenden Speicher benötigen und benachbarte Array-Elemente zugänglich sein müssen, ohne Schreibvorgänge zu erfinden, muss eine Plattform möglicherweise "large char s" wählen, um die kleinste Speichereinheit zu berücksichtigen, die sie unabhängig adressieren kann.

    
Kerrek SB 12.01.2014 20:54
quelle

Tags und Links