2012-04-13 5 views

Antwort

3

Kurz gesagt, C Code, der mit Zeiger behandelt wird, um CPU Op-Codes kompiliert, die mit Adressen umgehen - so die Ziffer - der physische Maschinencode, der auf einem Wert, der eine Operation durchführt, ist einfach eine andere Befehlscode von einer das führt eine Operation für eine Adresse (Zeiger) aus.

Die Realität ist komplizierter als das natürlich. Sie können im Detail sehen, was in dieser Stack-Überlauf Frage nach den Anweisungen verschiedenen (small) C Programme geschieht mit How do you get assembler output from C/C++ source in gcc?

Auf einer tieferen Ebene, Betriebssysteme und CPUs virtualisieren physische Speicher - so dass ein Befehl, den Speicher anfordert an Die Adresse x verwendet in der Hardware eine virtuelle Nachschlagetabelle, um Speicher von der physischen Adresse y abzurufen. Dies ist eine moderne Entwicklung, die Sicherheits- und Speicherverwaltungsfunktionen wie die Randomisierung des Speichers ermöglicht.

1

Sie Fragen, über die ganze Bücher geschrieben wurden, zu fragen, aber hier ist das Wesentliche:

  1. durch den Zeiger zu dereferenzieren. Ein Zeiger ist eine Adresse im Speicher, daher beschreibt der Zeiger genau, wo die Daten abgerufen werden, auf die er zeigt.
  2. Weil Code dem Compiler (über *) sagt, dass eine Variable einen Zeiger enthält. Der Compiler wandelt diese Information in Code um, der dem Prozessor genau sagt, was zu tun ist. Der Prozessor nicht "wissen, dass der Inhalt eines Zeigers eine Adresse und nicht die Daten selbst ist;" es tut nur, wie der Maschinencode es anweist.
  3. Ein Schritt-für-Schritt-Prozess von was?