C / C ++: sizeof (short), sizeof (int), sizeof (long), sizeof (long long) usw. auf einem 32-Bit-Computer im Vergleich zu einem 64-Bit-Computer

Ich verwende Windows 7 (64-Bit).

Bei dieser Frage handelt es sich um dieselbe Frage, die Sie hier finden:

lange auf einem 64-Bit-Computer

Dies ist jedoch ausführlicher, da es sich um noch mehr Datentypen handelt und sich auf C oder C ++ und nicht auf C # bezieht. Zunächst verwende ich Microsoft Visual Studio Ultimate 2012. Leider unterstützt diese IDE, obwohl sie C # und Visual C ++ unterstützt, offenbar kein einfaches altes Visual C mehr. Jedenfalls habe ich versucht, das folgende Standard-C ++ - Programm in der IDE zu erstellen:

#include <cstdio>

int main(int argc, char **argv) {

  printf("sizeof(short): %d\n", (int) sizeof(short));

  printf("sizeof(int): %d\n", (int) sizeof(int));

  printf("sizeof(long): %d\n", (int) sizeof(long));

  printf("sizeof(long long): %d\n", (int) sizeof(long long));

  printf("sizeof(size_t): %d\n", (int) sizeof(size_t));

  printf("sizeof(void *): %d\n", (int) sizeof(void *));

  printf("Hit enter to exit.\n");

  char *scannedText;

  scanf("%s", &scannedText);

  return 0;

}

und da ich die Option zum Ausführen einer Konsolenanwendung nicht gefunden habe, habe ich einfach einen Haltepunkt bei "return 0;" Anweisung, um die Ausgabe in der Konsole anzuzeigen. Das Ergebnis war:

sizeof(short): %d\n", 4
sizeof(int): %d\n", 4
sizeof(long): %d\n", 4
sizeof(long long): 8
sizeof(size_t): 4
sizeof(void *): 4
Hit enter to exit.

In alten C-Lehrbüchern heißt es, dass int auf die "Wortgröße" eingestellt ist, dh 16 auf 16-Bit-Maschinen und 32 auf 32-Bit-Maschinen. Diese Regel scheint jedoch auf 64-Bit-Systemen zu brechen, bei denen man eine "Wortgröße" von 64 erwarten würde. Nach meinem Kenntnisstand sind diese Systeme wie 32-Bit-Systeme, bieten jedoch eine bessere Unterstützung für 64-Bit-Berechnungen als ihre 32-Bit-Kollegen taten es. Daher sind die Ergebnisse, die mit dem obigen C ++ - Programm erzielt werden, genau die gleichen, die man mit einem 32-Bit-System erzielen würde. Die Größe der Datentypen (size_t) (mit der die von Objekten im Speicher belegte Speichermenge gemessen werden kann) speichert ihre Werte ebenfalls in 4 Bytes, und es ist auch interessant, dass die Größe der Zeiger für den Zugriff auf Speicherstellen (z instance sizeof (void *) gibt an, wie viele Bits zum Speichern von generischen Zeigern an einer beliebigen Stelle im Speicher verwendet werden) ist ebenfalls 32 Bit lang.

Jeder weiß, warum Visaul C aus Visual Studio 2012 entfernt wurde und ob es weiterhin möglich ist, Konsolenanwendungen in Visual Studio 2012 auszuführen, ohne vor dem Beenden einen Haltepunkt festlegen oder Text aus der Standardeingabe lesen zu müssen, damit das Konsolenfenster beendet wird Pause vor dem Schließen?

Ist meine Interpretation außerdem korrekt, oder ist in der IDE etwas falsch konfiguriert, sodass die Kompilierung beispielsweise für 32-Bit-Systeme und nicht für 64-Bit-Systeme erfolgt? Laut einem der Poster sollte ich die hier beschriebenen Ergebnisse für size_t und Pointer sehen, da mein System 64-Bit ist:https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models aber ich sehe das nicht. Gibt es eine Möglichkeit, Visual Studio so zu konfigurieren, dass es möglicherweise ein 64-Bit-Speichermodell unterstützt, im Gegensatz zu dem, was ich derzeit in der Programmausgabe sehe?

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage