Warum hat "long int" dieselbe Größe wie "int"? Funktioniert dieser Modifier überhaupt?

8

Ehm .. Ich mag diese Modifikatoren, wie long / short , die die Speichermenge, die beim Erstellen von Variablen zugewiesen wird, erweitern / reduzieren, aber ...

%Vor%

Aus unbekannten Gründen wird die Größe von int und long int als gleich ausgegeben. Ich benutze vc ++ 2010 Express Edition. Sorry, schwer zu finden Antwort in Google, es zeigt immer lang und int als separate Typen.

    
Kosmos 21.08.2013, 09:03
quelle

6 Antworten

13

Der Grund dafür, dass MS selbst auf einem 64-Bit-System long 32 Bit verwendet, ist, dass die vorhandene Windows-API aus historischen Gründen eine Mischung aus int und long für ähnliche Dinge und die Erwartung verwendet ist, dass dies ein 32-Bit-Wert ist (einige davon gehen auf Zeiten zurück, als Windows ein 16-Bit-System war). Um die Konvertierung von altem Code in die neue 64-Bit-Architektur zu ermöglichen, haben sie long mit 32 Bit beibehalten, sodass Anwendungen, die int und long an verschiedenen Stellen mischen, immer noch compiliert werden.

Es gibt nichts im C ++ - Standard, der vorschreibt, dass ein long größer sein sollte als int (auf den meisten 32-Bit-Systemen ist dies sicherlich nicht der Fall). Der Standard besagt, dass die Größe von short & lt; = int & lt; = long - und dass short mindestens 16 Bits ist, wenn der Speicher nicht notwendigerweise als "mindestens 16" ausgedrückt wird Bits ", ich denke, es erwähnt die Bandbreite der Werte].

    
Mats Petersson 21.08.2013, 09:10
quelle
4

Alles was der Standard erfordert ist:

%Vor%

und

%Vor%

(und die entsprechenden vorzeichenlosen Typen haben die gleiche Größe wie die signierten Typen).

Darüber hinaus gibt es für jeden Typ indirekt Mindestgrößen spezifiziert durch Grenzen für die Werte von INT_MAX , etc .: a char muss mindestens 8 Bits, ein short und ein int 16, ein long 32 sein und ein long long 64.

Auf 16-Bit-Plattformen ist es üblich, dass sowohl short als auch int verwendet werden 16 Bits sein; auf 32-Bit-Plattformen (und die 36- und 48-Bit-Plattformen die noch existieren), int und long sind fast immer gleich Größe. Auf modernen 64-Bit-Plattformen (mit Byteadressierung) ist der Rationale Lösung wäre, alle vier Typen unterschiedlich zu machen Größen (obwohl man argumentieren könnte, dass nach dem Standard, int sollte 64 Bit sein, was bedeutet, dass int , long und long long alle dieselbe Größe hatten).

    
James Kanze 21.08.2013 09:20
quelle
1

C- und C ++ - Implementierungen, ein long ist größer oder gleich einem int. Die beliebtesten Desktop-Plattformen von heute, wie Windows und Linux, laufen hauptsächlich auf 32-Bit-Prozessoren, und die meisten Compiler für diese Plattformen verwenden einen 32-Bit-Int, der die gleiche Größe und Darstellung wie ein Lang hat.

    
Dayal rai 21.08.2013 09:10
quelle
0

Im 64-Bit-Compiler sind int und log int 4 Bytes.

Wenn Sie in Windows sind, gehen Sie den folgenden Link durch: Ссылка

Sie können einige Informationen in einer anderen Diskussion finden: Was ist die Bitgröße von lang auf 64- Bit Windows?

    
fox 21.08.2013 09:15
quelle
0

Hier ist die Bestellung

%Vor%

Der Standard erfordert, dass sizeof(char) == 1 wahr ist. Der Standard erfordert auch, dass: int mindestens 16 Bits ist. long int ist mindestens 32 Bit und long long int ist mindestens 64 Bit.

Wenn 32-Bit-Prozessoren mainstream sind, setzen Compiler typischerweise int auf 4 Bytes. Die Erweiterung ist auf 64-Bit-Systemen (für MSVC sowieso) aus Kompatibilitätsgründen nicht wieder aufgetreten.

    
xen-0 21.08.2013 09:15
quelle
0

Der Punkt ist, dass Sie die Bedeutung von int und long falsch verstehen (das ist kein Adjektiv).

Was der Standard definiert, ist, dass die Anzahl der Bits in jedem Typ erfordert, dass diese Beziehung an Ort und Stelle bleibt:

%Vor%

int kann für sich selbst so lange wie ein short bis zu einem long sein, je nachdem wie die Implementierung konzipiert ist.

Compiler-Designer tendieren dazu, die Leistung von int arithmetic zu maximieren, indem sie die natürliche Größe für den zugrunde liegenden Prozessor oder das Betriebssystem festlegen und die anderen Typen entsprechend einrichten.

Aber die Verwendung von long int , da int weggelassen werden kann, ist per Definition identisch mit long .

    
Emilio Garavaglia 21.08.2013 09:21
quelle

Tags und Links