Przestrzeń adresowa, którą widzi Twój program, ZAWSZE jest wirtualna. (Przynajmniej w każdym nowoczesnym systemie operacyjnym.)
Przydzielasz pamięć, wywołując w tym celu interfejsy API systemu operacyjnego (lub kompilator robi to za Ciebie, gdy definiujesz zmienne w kodzie).
Adresy (lub wskaźniki, niezależnie od tego, jak je nazywa język programowania) zwracane dla tej przydzielonej pamięci są prawidłowe w kontekście twojego programu.
W przypadku pamięci, którą sam przydzieliłeś, jesteś odpowiedzialny za jej przywrócenie do systemu operacyjnego. Jeśli kompilator wykonał czynności w Twoim imieniu, kompilator również uwzględni niezbędne czyszczenie. Po wyjściu z programu system operacyjny wykona również czyszczenie.
Miejsce, w którym rzeczywiste dane programu znajdują się w fizycznej pamięci RAM komputera, jest całkowicie akademickie. Twój system operacyjny odwzoruje wirtualną przestrzeń adresową, którą widzi Twój program, na fizyczną pamięć RAM i / lub przestrzeń wymiany. Sam po prostu nie wiesz, jak to się robi w danym momencie.
Może to być ważne, jeśli programujesz sterownik urządzenia lub komponent jądra, ale oczywiście nie masz wymaganej wiedzy na temat systemów operacyjnych i programowania do tego. Tyle wynika z twojego pytania.
Takie oprogramowanie działa na innym poziomie i może wymagać interakcji z rzeczywistą fizyczną pamięcią RAM. Istnieją specjalne metody i interfejsy API, aby sobie z tym poradzić, ale nigdy nie spotkasz ich w normalnym programie napisanym przez użytkownika.
Inną możliwością jest programowanie niskiego poziomu na urządzeniu wbudowanym, na którym nie ma systemu operacyjnego, który zapewniłby tę warstwę abstrakcji między wirtualną a fizyczną pamięcią RAM. Ponownie: jest to coś dla specjalistów.
Po prostu nie jest to coś, o co będziesz musiał się martwić, jeśli napiszesz poprawne programy zgodnie z zasadami języka programowania.
Oczywiście: jeśli twój program jest niepoprawny (np. Uzyskuje dostęp do pamięci, której nigdy nie przydzielił), program może ulec awarii lub zostanie przerwany przez sam system operacyjny, jeśli system wykryje, że program działa nieprawidłowo. Ważnym aspektem programowania jest ustalenie, co poszło nie tak i rozwiązanie problemu w programie. Nazywa się to debugowaniem.