2015-10-28 7 views
5

Ich habe Memory Management verwandten Themen studiert. Ich frage mich, ob ich es richtig verstanden habe:Ist die virtuelle Adresse prozessspezifisch?

  • Zeiger (virtuelle) Adresse ist prozessspezifisch
  • verschiedene Prozesse können Zeiger mit gleichen Adressen haben, aber diese Hinweise erhalten übersetzt unterschiedliche physikalische Adressen

Bin ich richtig über diese Aussagen? Wenn ja, gelten sie für die Architekturen x86, x86-64 und ARMv7, ARMv8?

+0

Haben Sie relevante Wikipages auf [processes] (https://en.wikipedia.org/wiki/Process_%28computing%29), [virtueller Speicher] (https://en.wikipedia.org/wiki/Virtual_memory) gelesen), [virtueller Adressraum] (https://en.wikipedia.org/wiki/Virtual_address_space) ....? –

+0

@BasileStarynkevitch Nun, nicht alle von ihnen. Ich bin mir jedoch nicht sicher, ob ich es richtig verstanden habe. Schauen Sie sich die Antworten an, beide sagen etwas Gegenteiliges. Und wenn jemand eine Frage beantwortet, dann behauptet er, dass er/sie das Thema kennt. Also haben wir jetzt zwei Wahrheiten :) – kravemir

Antwort

8

Nun ausgenommen:

verschiedene Prozesse Zeiger mit gleichen Adressen haben, aber diese Hinweise erhalten auf verschiedene physikalische Adressen übersetzt

während dies den allgemeinen Fall ist natürlich verschiedene Prozesse könnte freigegebene Seiten teilen (in Shared Memory) und dann die Zeiger könnten zeigen auf die gleichen Daten, da die Seiten auf die gleichen Positionen im virtuellen Adressraum zugeordnet sind.

Aber ja, das ist das richtige Verständnis.

+3

Shared Memory könnte auch auf verschiedene Adressen in verschiedenen Prozessen abgebildet werden. –

+0

Sicher, könnte, muss aber nicht. Mappings von Shared Libraries zum Beispiel ... Ich werde den Wortlaut verbessern. –

+0

Danke. Also, kleine Korrektur der Aussage wäre: ** kann ** übersetzt werden :) – kravemir