64-Bit-Anwendung: Layout im Speicher

Das 64-Bit-Betriebssystem bezieht sich auf die Bitbreite der Universalregister. Es ist in der Lage, 64 Bits (Daten + Operationen) gleichzeitig zu verarbeiten.

Wir wissen, dass Programmierer 64-Bit-Anwendungen schreiben müssen, damit das 64-Bit-System wirklich nützlich ist.

Ich frage mich jedoch, was der Unterschied zwischen einer 32-Bit-Anwendung und einer 64-Bit-Anwendung ist. Ich frage nicht, welche Konfigurationsänderungen ich vornehmen muss, um eine 64-Bit-Anwendung zu kompilieren. Stattdessen möchte ich die strukturellen Unterschiede der beiden Anwendungen im Speicher kennen.

Beispielsweise sieht ein C-Programm unter Linux im Speicher normalerweise so aus: 1, Textsegment 2, initialisiertes Datensegment 3, nicht initialisiertes Datensegment 4, Heap 5, Stapel

Ich würde mir vorstellen, dass die 64-Bit-Anwendung im Hinblick auf die Layoutstruktur im Speicher gleich aussehen würde, mit der Ausnahme, dass die Adresse für jedes Byte (unter der Annahme eines byteadressierbaren Systems) mehr Bits hat. Wenn das stimmt, was impliziert die 64-Bit-Version? einfach größerer adressierbarer speicherplatz?

Wenn eine 64-Bit-Anwendung kompiliert wird, nehmen wir an, dass eine Anweisung im Quellcode in die Anweisung add mips im Assemblycode kompiliert wird:

add $1 $2 $1 // $1 += $2;

Jeder MIPS-Befehl ist in genau 32 Bits codiert. Hier ist die Frage, ob eine Anwendung so konfiguriert ist, dass sie als 64-Bit-Anwendung kompiliert werden kannadd Anleitung sieht aus wie? Hat es noch 32 Bit oder ist es auf 64 Bit erweitert, was die Mips-Regel verletzt? Wenn es immer noch 32 Bit sind, kann ich nicht erkennen, welchen Unterschied eine 64-Bit-App macht, so dass "64-Bit-Betriebssysteme voll zur Geltung kommen".

Bitte erleuchte mich.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage