Die derzeit akzeptierte Antwort ist im Allgemeinen richtig, jedoch nicht ausdrücklich. Es gibt wirklich nicht eine einzige Sache, die als "32-Bit-CPU" oder "" 64-Bit-CPU "bezeichnet wird - dies ist eine Beschreibung, die sich nur auf einen kleinen Teil der Architektur der CPU bezieht, insbesondere auf die Nummer von Adressauswahlleitungen zwischen der CPU und dem Speicher, dh dem sogenannten Adressraum, der für Speicheroperationen verfügbar ist.
In früheren Zeiten, als die CPU, als die Leute sich hinsetzten und die Drähte zwischen einem Prozessor und dem Arbeitsspeicher weben (wickeln) mussten, hätten Sie entweder 32 oder (theoretisch, weil es zu dieser Zeit nicht vorhanden war) verwendet werden müssen. 64 Kabel zwischen der CPU und dem Speichercontroller, über die die Speicheradresse angegeben werden soll, auf die Sie zugreifen möchten. Nehmen wir beispielsweise an, wir haben eine 2-Bit-Speicherarchitektur: Senden von 00 würde Adresse 0 auswählen, 01 würde Adresse 1 auswählen, 10 würde Adresse 2 auswählen und 11 würde Adresse 3 auswählen. Dieses 2-Bit ergibt 2 ^ 2 Bytes RAM (4 Byte).
Wenn Sie eine 32-Bit-CPU verwenden und 32 weitere Kabel zwischen der CPU und dem Speichercontroller hinzufügen, sodass Sie mehr Speicher magisch unterstützen können, verfügen Sie jetzt über eine "64-Bit-CPU", die 32-Bit ausführen kann Code oder 64-Bit-Code. Was bedeutet das und wie geschieht das? Nun, nehmen wir unsere 2-Bit-CPU aus dem vorherigen Teil dieser Antwort und fügen Sie eine weitere Leitung hinzu, um daraus eine 3-Bit-CPU zu machen, die uns von 4 Bytes zu 2 ^ 3 oder 8 Bytes RAM führt.
Bestehender "2-Byte" -Code wird ausgeführt, wobei die Werte der letzten 2 Drähte wie oben angegeben (00-11) eingestellt werden. Wir werden die zusätzliche Verbindung standardmäßig auf Null setzen. Wenn also der 2-Byte-Code ausgeführt wird, wenn 00 ausgewählt wird, wird tatsächlich 000 und bei 11 11 011 gewählt. Einfach.
Jetzt möchte ein Programmierer "nativen" 3-Byte-Code schreiben und schreibt seine Software, um den zusätzlichen Adressraum zu nutzen. Sie teilt der CPU mit, dass sie weiß, was sie tut, und dass sie die neuen zusätzlichen Kabel manuell steuern wird. Ihre Software kennt die zusätzlichen Kabel und sendet korrekt 000-111, wodurch sie vollen Zugriff auf den Speicherbereich hat, der von dieser neuen CPU-Architektur unterstützt wird.
Aber so muss es nicht sein. Tatsächlich passieren die Dinge normalerweise nicht . Bei der Einführung von 64-Bit-CPUs (und es gab viele), wurden alle mit völlig neuen Architekturen / Designs ausgestattet. Sie haben nicht nur weitere 32 Drähte angeheftet und gesagt: "Hier geht's, dies ist eine 64-Bit-CPU, die Sie im 32-Bit- oder 64-Bit-Modus verwenden können", sondern sie sagten: "Dies ist unsere neue CPU und Es erfordert nur das Programmieren in dieser völlig neuen Maschinensprache, verhält sich auf diese völlig neue Art und Weise, löst eine Vielzahl von Problemen weitaus eleganter als die alten x86 / i386-32-Bit-CPUs, und es ist eine native 64-Bit-Architektur . "
Das war die Geschichte des Intel Itanium, der wegen seines massiven Untergangs als "Itanic" bekannt ist. Es sollte in der neuen 64-Bit-Ära angekündigt werden, und es war etwas zu sehen. Anweisungen mit variabler Länge, riesige Caches, 64-Bit-Adressraum, Tonnen von Registern, super aufregend, super cool und super schwer, jeden dazu zu überreden, 20 Jahre alten Code neu zu kompilieren oder umzuschreiben. Dies war damals, als AMD und Intel tatsächlich miteinander konkurrierten, und AMD hatte die geniale Idee zu sagen: "Vergessen wir das alles" lösen Sie alle Probleme der Welt ", fügen Sie dem i386 nur 32 weitere Kabel hinzu und erstellen Sie ein 32-Bit-kompatibles 64- Bit-CPU "und die x86_64-CPU-Architektur wurde geboren.
Wenn Sie sich die Kernelnamen und -quellen für die wichtigsten Betriebssysteme (Linux, Windows, BSDs usw.) ansehen, werden Sie feststellen, dass sie mit Verweisen auf AMD64-CPUs und AMD64-Architektur übersät sind. AMD entwickelte eine erfolgreiche Strategie, um alle Benutzer dazu zu bringen, auf die 64-Bit-Welt umzusteigen und dabei die Kompatibilität mit 32-Bit-Anwendungen zu wahren, sodass ein 32-Bit-Betriebssystem auf 64-Bit-Hardware oder sogar auf 32-Bit-Anwendungen ausgeführt werden kann könnte auf einem 64-Bit-Betriebssystem auf 64-Bit-Hardware ausgeführt werden. Intel folgte eher früher als später mit seiner "Intel EM64T" -Architektur (die im Wesentlichen identisch mit AMD64 war) und x86_64 gewann, während Itanic und andere wie MIPS64 und ALPHA64 nicht mehr auf dem Desktop / Server-Markt zu sehen waren.
tl; dr amd64 aka x86_64-CPUs sind so konzipiert, dass sie sowohl mit 32- als auch mit 64-Bit-Kernel und Code kompatibel sind, die meisten 64-Bit-CPUs sind jedoch auf die gleiche Weise nicht abwärtskompatibel. Eine 32-Bit-CPU kann auf höchstens 4 GB Speicher zugreifen, während eine 64-Bit-CPU auf atemberaubende 16 EiBs (16 × 1024 ^ 6 Bytes oder 4 Milliarden Mal so viel Speicher wie 4 GB) zugreifen kann.