Warum weisen Speicherzugriffsfehler auf einem 64-Bit-Computer auf eine 32-Bit-Adresse hin?

394
kozooh

Wahrscheinlich ist bei jedem Computer mindestens einmal in seiner Computerlebensdauer ein Fehler aufgetreten, z. B. eine Zugriffsverletzung bei 0x8231d13f, der die 32-Bit-Adresse im Speicher angibt, an der die Verletzung aufgetreten ist. Nehmen wir an, wir haben 8 GB RAM. Die Frage ist: Warum behandeln 64-Bit-CPUs diese Verletzungsfehler immer noch einen 32-Bit-Wert und keine 64-Bit-Werte (z. B. 0x1934a8bb34cf1200)? Wenn der Computer immer noch 32-Bit verwendet, wie kann er dann auf Adressen zugreifen, wenn wir mehr als 4 GB RAM haben (die mehr als 2 ^ 32 Adressen speichern können)?

Zuerst dachte ich, es könnte etwas mit der Adressbusleitungsbreite zu tun haben, aber ich lese, dass aktuelle AMD-Architekturen diese Zeilen mit einer Breite von 48 Bit haben.

-1
Der einzige Grund, warum eine Speicherzugriffsverletzung auf eine 32-Bit-Adresse verweist, ist, wenn die Speicherverletzung in einem 32-Bit-Prozess aufgetreten ist, da eine 32-Bit-Anwendung nur auf 32-Bit-Adressen zugreifen kann. Ramhound vor 5 Jahren 0

1 Antwort auf die Frage

2
Mokubai

Dinge wie dieses

werden vom Betriebssystem nicht bereitgestellt. Es ist Sache des Programms selbst, Fehler abzufangen und sinnvolle Fehlerinformationen anzuzeigen.

Wenn der Fehler in einem 32-Bit - ausführbar ist, eingefangen von einem 32-Bit - Ausnahme - Handler dann gibt es nichts, dass der Fehler Dialog kann tun, sondern zeigt eine 32-Bit - Adresse für die Fehlerstelle.

Wenn es so weit kommt, dass das Betriebssystem in dem Prozess eingreifen muss wegen einer Zugriffsverletzung dann ist es wahrscheinlich nichts tun, ignoriert die Anforderung, die einen Fehler verursacht, geben Sie den entsprechenden Fehlercode an die Anwendung und erwartet, dass es zu behandeln Ausgabe einer Fehlermeldung. Dies ist keine Funktion auf Betriebssystemebene. Dies ist ausschließlich der Anwendungsbereich der Anwendung.

Wenn das Programm war ein 64-Bit - Programm, mit 64-Bit bewusst Ausnahmebehandlung dann würde ich erwarten, eine lange Adresse im Fehlerfenster zu sehen.

Aber selbst diese Informationen in einer Dialogbox zu zeigen, ist im besten Fall zwecklos und nutzlos. Zu dem Zeitpunkt, an dem Sie diese Informationen anzeigen, ist sie grundsätzlich nicht mehr möglich. Einige Daten sind verloren gegangen, ein kritischer unbehandelter Status ist aufgetreten, und es besteht die Gefahr, dass Sie alles verloren haben, was Sie getan haben.

Das Anzeigen einer beliebigen Adresse von Fehlerinformationen an einen Endbenutzer fummelt herum, während Rome brennt. Der Benutzer kann nichts dagegen tun, es besteht die Chance, dass die Adresse bei jedem Aufruf anders ist, und es handelt sich lediglich um Dialograuschen. Sie könnten genauso gut sagen: "Entschuldigung, es ist etwas Schlimmes passiert und wir werden aufhören" und belassen es dabei.

Ähm, nein. Diese Fehlermeldung wird von Windows bereitgestellt, insbesondere von einem Standard-Ausnahmehandler. Dies geschieht, wenn kein Ausnahmebehandler im Anwendungscode einen Ausnahmebehandler bereitstellt, der sich mit der jeweiligen Ausnahme befasste. Jamie Hanrahan vor 5 Jahren 0