In dem unten aufgeführten Programm sind die Größe von (int) und sizeof (lang) auf meinem Rechner gleich (beide gleich 4 Bytes (oder 32 Bits)). Ein langer, soweit ich weiß, ist 8 Bytes. Ist das richtig? Ich habe eine 64-Bit-Maschine
%Vor%A long, soweit ich weiß, sind 8 Bytes. Ist das korrekt?
Nein, das ist nicht korrekt. Die C- und C ++ - Spezifikationen geben nur an, dass long größer als oder gleich 32 Bits sein muss. int
kann kleiner sein, aber auf vielen Plattformen in C und C ++ sind long
und int
beide 32 Bits.
Dies ist ein sehr guter Grund, ganzzahlige Typen mit fester Breite zu bevorzugen , wie z. B. int64_t
, wenn sie dies tun stehen Ihnen zur Verfügung und Sie verwenden C99 oder ein Framework, das Ihnen einen äquivalenten Typ zur Verfügung stellt.
C ist weder Java noch C #. Wie andere schrieben, gibt die C-Spezifikation Mindestlängen und relative Längen an. Warum? C wurde entwickelt, um Low-Level-und kompilieren und laufen auf praktisch jeder Hardware jemals gemacht.
Wenn eine Spezifikation dem Programmierer zu viel verspricht, kann die Implementierung schwierig werden (und langsam), wenn die Hardware dies nicht unterstützt. Java- und C # -Entwicklern ist es egal, sie mögen den Komfort ihrer Sprachen für höhere Jobs und zögern nicht, große virtuelle Maschinen zu installieren, die sich darum kümmern, alle Versprechen (oder zumindest die meisten) zu erfüllen.
C-Programmierer möchten sogar auf Maschinenbefehlsebene die Kontrolle über den Code behalten. Volle Kontrolle über die Hardware. Nur so können alle Hardwarefunktionen genutzt und maximale Performance erreicht werden. Aber Sie müssen vorsichtig mit Ihren Annahmen über die Hardware sein, die Sie verwenden. Wie immer kommt mit großer Kraft große Verantwortung.
Nur um das zu verdeutlichen: C geht nicht von 8-Bit-Bytes aus. Siehe CHAR_BIT
in <limits.h>
.
Eine verwandte Frage ist Größe einer Ganzzahl in C .
Es hängt von Ihrem ABI ab. Wenn Sie Windows verwenden, hat Microsoft ein LLP64-Modell ausgewählt, also sind long
und int
beide 32-Bit, während long long
und Zeiger 64-Bit-Builds sind, aus Legacy-Gründen.
Die meisten UNIX-Plattformen haben ein LP64-Modell gewählt, das für 64-Bit-Builds int
32-bit, long
, long long
und Pointer 64-bit macht.
Aber, wie Reed Copsey bemerkt, gibt der Standard nur minimale Längen und relative Längen an. Und long
muss größer oder gleich der Länge von int
sein.
Nein, der Standard definiert die Mindestwerte für long
ist 4 bytes
und int
ist 2 bytes
. Wie im Entwurfsstatus C99 Abschnitt 5.2.4.2.1
Größen Integer-Typen Absatz 1 sagt:
[...] Ihre implementierungsdefinierten Werte müssen gleich oder größer sein als [...]
und für long
haben wir:
was 4 bytes
ist. Der Vollständigkeit halber haben wir folgendes für int
:
was 2 bytes
ist.
Tags und Links c int sizeof long-integer