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 ?
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
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.
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.