2016-06-29 31 views
0

Ich kenne das Konzept von LIFO, Push, Pop.Gibt die Adresse der Variablen ihre Position im RAM an?

Wenn ein Code die Adresse einer Variablen wie 2245781 zurückgibt, unter der Annahme von Dezimal, heißt das wirklich, dass die Variable auf dem 2245781st Byte auf dem Stapel ist? Und wenn ich es umwandeln in Gigabyte wird das innerhalb der verwendeten Menge des RAM in diesem Moment sein? Wenn nicht, warum? Ist es auch für Haufen?

Einfach nur neugierig ..

Antwort

0

Ja, die Adresse einer Variablen ist seine Lage im RAM, die oft auf modernen Desktop-Klasse Systeme virtualalized wird. So können zwei Prozesse eine Variable bei die gleiche Adresse haben, da alles, was sie sehen, die virtuelle Adresse ist.

Im Allgemeinen sind die Adressen für einzelne Variablen für moderne Desktop-Klassensysteme nicht oft ungerade, obwohl dies passieren kann.

Nein, es ist keine Indizierung in "den Stack", alle Adressen sehen normalerweise gleich aus und der Stack ist nicht anders. Es gibt keinen separaten Adressraum für Dinge auf dem Stapel, der Stapel ist eine Sache im Speicher wie jede andere auch.

Ich verstehe nicht, was Sie mit "konvertieren zu Gigabyte" meinen.

+0

Wenn Sie von Virtualisierung sprechen, meinen Sie eine Variable, die von zwei Prozessen verwendet wird, mit unterschiedlichen Adresswerten für jeden Prozess, aber im Speicher identisch ist? Ich weiß Stack liegt in der Erinnerung selbst, aber was ich meinte war, wenn ich den 'Byte-Wert' der gedruckten Adresse konvertieren kann, sollte es immer kleiner oder gleich den verwendeten Bytes im Hauptspeicher sein, angenommen die gedruckte Adresse war die tatsächliche Adresse selbst, keine virtuelle (wenn meine erste Aussage in diesem Kommentar richtig war). – Kameshwaran

+0

Nein, andersherum. Prozesse (im Allgemeinen) teilen keinen Speicher, daher befinden sich die Variablen an verschiedenen Orten im physischen Speicher. Aber die virtuellen Adressen der Variablen können durchaus die gleichen sein, da sie virtuell sind, sehen sie für jeden Prozess so aus, als ob er alleine im Speicher wäre. Und nein, es gibt keine Garantie, dass Adressen von 0 vergeben werden, so dass Sie eine solche Adresse nicht interpretieren können. Für virtuelle Adressen gibt es oft eine Randomisierung, wodurch sie noch undurchsichtiger werden. – unwind