Zunächst betrachten Sie nicht das OS; Sie betrachten den zugewiesenen Speicher Ihres eigenen Prozesses. Das meiste, was Sie mit diesem Ansatz sehen könnten, ist Ihr Prozess Bild (wahrscheinlich einschließlich aller Bibliotheken, die Sie verknüpft haben).
Zweitens, wenn Sie etwas ganz besonderes tun, verwenden Sie virtual memory, wie marinus says. Die virtuelle Adresse 0x001000 in Ihrem Prozess könnte auf die physische Adresse 0x; Die virtuelle Adresse 0x002000 könnte der physischen Adresse 0x42017000 entsprechen. Einige virtuelle Adressen möglicherweise nicht überall zuordnen - betrachten, auf einer 32-Bit-Maschine können Sie 2 Adressen haben. Das sind 4 GiB - nicht viele Computer haben sogar so viel physischen Speicher. (Und lassen Sie uns nicht einmal über 64-Bit-Maschinen denken!) Selbst wenn das System 4 GiB physischen Speicher hätte, würde es nicht alle in Ihrem virtuellen Adressraum zugeordnet werden, weil es andere Prozessspeicher (und ja, Kernel-Speicher).
Wie marinus erwähnt, ist ein Zeiger mit einem Wert von 0 ein Nullzeiger. Die C Programming Language Specification, Abschnitt 6.3.2.3 „Pointers“ Absatz 3, sagt:
eine ganzzahlige Konstante Ausdruck mit dem Wert 0, oder einem solchen Ausdruck void *
Typ umgewandelt wird ein Null-Zeiger aufgerufen konstant. Wenn eine Null-Zeiger-Konstante in einen Zeigertyp konvertiert wird, der resultierende Zeiger, genannt Nullzeiger, wird garantiert ungleich zu einem Zeiger auf ein Objekt oder eine Funktion zu vergleichen.
Der zweite Satz bedeutet, dass es nichts an der Null-Zeiger-Adresse (die Adresse 0) sein kann, , denn wenn es etwas gibt, dann einen Zeiger auf dieses Objekt zu einem Null-Zeigern gleich sein würde, . C-Laufzeitumgebungen einrichten Daher eine virtuelle → physikalische Speicherkarte etwas wie folgt aus:
(Gebäude auf der einen in the Wikipedia page), wobei 0 virtuelle Adresse immer nicht so konfiguriert ist, auf alles abgebildet.
Die Sprache C hat dieses Verhalten nicht immer angegeben. Noch vor 25-30 Jahren, konnte ein Programm den virtuellen Speicherort 0 - vor allem auf 16-Bit-Systemen, und Maschinen zugreifen, deren Speicherverwaltungsarchitektur nicht ausgefeilt war, damit das System die Speicherseite 0 unzugänglich machen konnte , ohne einen großen Teil des virtuellen Adressraums zu opfern.
Welches Betriebssystem ist das? –
Speicheradressen [sind nicht sequentiell] (https://en.wikipedia.org/wiki/Address_space_layout_randomization) auf den meisten modernen Betriebssystemen. – jordanm
(1) Warum ist diese [Festplatte] markiert? (2) Warum holen Sie eine Ganzzahl ('* (int *) ptr') und versuchen, sie mit'% c' zu drucken? – Scott