Ich glaube mal, dass es ein grundlegendes Verständnisproblem ist.
Du bekommst den Speicher (die Adressen) auf zwei Arten, zumindest wenn wir mal von C/C++ ausgehen.
Entweder deine Werte (Variablen) liegen auf dem Stack, der ist auch im RAM zu finden.
Wenn man mal von der OS-Entwicklung weg geht, dann bekommt dein Programm vom OS einen Speicher auf dem RAM zugewiesen, der als Stack
verwendet wird. Dann kannst du innerhalb von Funktionen Variablen definieren, die dann vom Compiler auf den Stack gelegt werden.
Allerdings sind diese Werte verschwunden, wenn die Funktion abgearbeitet wurde.
Eine andere Möglichkeit ist der Heap. Die Variablen auf dem Heap bleiben auch gültig, wenn die Funktion beendet ist.
Dazu gibt es beim OS eine sogenannte Speicherverwaltung. Die garantiert dir, dass dein Speicher nicht doppelt belegt wird.
Dazu gibt es bei C die Funktionen malloc und free. Malloc holt dir Speicher, den du verwenden kannst und free gibt ihn wieder zurück.
Nach dem free ist der Wert natürlich ungültig, da du damit dem OS sagst, dass du diesen Speicher nicht mehr benötigst.
Bei C++ heißen die Funktionen new und delete. Machen eigentlich genau das gleiche. Allerdings werden hier noch Konstruktoren der Klassen aufgerufen, weshalb es andere Funktionen als malloc und free sind. Das führt aber hier zu weit.
Für dich ist es nur wichtig zu wissen welchen Speicher es gibt. Also auf dem Stack und auf dem Heap.
Falls es wirklich um die OS-Entwicklung geht, dann sag nochmal bescheid. Dann muss man das etwas anders erklären.