Image demonstrating the memory window while debugging Wenn wir das Speicherfenster im Visual Studio verwenden, sehen wir die virtuelle Adresse dieses Prozesses oder die physikalische Adresse des RAM?Zeigt Visual Studio beim Debuggen virtuelle oder physische Adressen an?
Antwort
User-Level-Code immer sieht virtuelle Adressen. Es hat keine Möglichkeit zu wissen, welche physikalische Adresse (falls vorhanden!) entspricht derzeit einer dieser Adressen. "Virtuell" ist die einzige Welt in der es lebt und die einzige, die es jemals weiß. Für alle Absichten und Zwecke eines Programms ist "virtuell Realität."
Zur Klarstellung: alle Betriebssysteme (außer MS-DOS und dergleichen ...) laufen Anwenderprogramme in einem virtuellen Speicherplatz. Jedes Programm hat seine eigene Wahrnehmung dessen, was "Standort $12345678
enthält", und die Wahrnehmung jedes Programms ist dafür, korrekt. Jedes Programm kann dort eine andere Nummer haben und kann es nach Belieben ändern.
Sie können dies tun, weil keine von ihnen wissen tatsächlich:
- Wo, in physischen Gedächtnis "ihre 'Lage
$12345678
'" tatsächlich wohnt. (Wenn es tut ... und ganz-vielleicht ist es nicht!) - Was physische
$12345678
Adresse ist in.
Das Betriebssystem hält virtuelle Speicher für jeden Prozess, eine Kombination aus physikalisch-RAM mit und (falls erforderlich) Seite-Datei und/oder Auslagerungsdateibereich. Informationen, die von einem Prozess aktiv genutzt werden, werden ihm "on demand" an einem ihm unbekannten physikalischen RAM-Platz zur Verfügung gestellt und von ihm nicht erkannt. Informationen, die in letzter Zeit nicht verwendet wurden, werden schließlich aus dem physischen RAM "gestohlen" und in den externen Speicher verschoben ... bis sie erneut referenziert werden, wodurch ein sogenannter "Seitenfehler" ausgelöst wird.
Die Speicheransicht, die von einem Debugger Ihnen gegeben wird, ist die Speicheransicht, die von wahrgenommen wird, und das ist richtig für das Programm gedebuggt: virtuelle Adressen, in der virtuellen Speicher des Prozesses.
Gibt es eine maximale Grenze für den virtuellen Adressraum eines Prozesses? Wie wenn wir den Befehl top unter Linux verwenden. Er zeigt den physischen Speicher und den virtuellen Speicher eines Prozesses. (was sich ständig ändert). Wie kann sich der virtuelle Speicher für einen Prozess ändern? –
Das Anwendungsprogramm erkennt, dass ihm ein (virtueller) Speicherbereich einer bestimmten Größe zur Verfügung steht. Es kann nicht erkennen, ob sich ein Seitenfehler aus dem Versuch ergibt, auf einen bestimmten Standort zuzugreifen. Er kann die Größe seiner (virtuellen) Speicherzuordnung nur durch einen Systemaufruf vorbestimmen, um diese Informationen vom Betriebssystem anzufordern. –
Der Grund, warum Sie ständig wechselnde Werte vom Befehl 'top' sehen, liegt darin, dass * er die Aktivität des virtuellen Speichersubsystems des Betriebssystems * sehen kann.Es kann sehen, wie viel * physische * Ressourcen derzeit zur Unterstützung eines Prozesses aufgewendet werden: sowohl der aktuelle physische RAM-Footprint als auch der von beiden verwendete Swap-/Page-Speicherplatz. Es kann sehen, wie viel RAM der Prozess * haben würde (seine sogenannte "Arbeitssatzgröße") und wie viel RAM er tatsächlich bekommt. Es kann die Wartezeit sehen. Prozesse konkurrieren um die physische RAM-Ressource. Die physische Situation ändert sich ständig ... jede Mikrosekunde. –
Ich habe das Bild in dem Link in Frage geteilt. Kannst du nur einen Blick darauf werfen und ein wenig weiterarbeiten? –