Speicheradressen werden bei einem Datenzugriff benutzt, um einen bestimmten Speicherort auf einem Speichermedium zu identifizieren – analog zur Straßenadresse, die ein Gebäude in einem Ort identifiziert.
Eine Adresse kann verwendet werden, um z. B. eine Speicherzelle in einem RAM (siehe Speicherzugriff) oder einen Block auf einer Festplatte zu benennen.
Meist werden Speicheradressen in hexadezimaler Schreibweise angegeben. Speicheradressen beginnen meist bei null und werden in der Regel fortlaufend durchnummeriert.
Man unterscheidet zwischen logischen und physischen Speicheradressen. Die logische Adresse ist die, die ein Programm "sieht". Durch die Speicherverwaltung des Betriebssystems werden diese logischen Adressen auf physische Adressen abgebildet. Diese Abbildung ist im Allgemeinen für jeden Prozess unterschiedlich und für den Prozess transparent. Damit ist es möglich, dass mehrere Prozesse die gleichen logischen Adressen verwenden, aber dabei auf unterschiedliche physische Adressen zugreifen. Auch ist es möglich, einem Prozess mehr logischen Speicher zuzuteilen, als physisch vorhanden ist. Beim Zugriff auf die physisch nicht vorhandenen Speicherbereiche löst die CPU automatisch eine Ausnahme aus, welche vom Betriebssystem abgefangen wird. Das Betriebssystem kann dann zusätzlichen Speicher bereitstellen, in dem es beispielsweise andere Speicherbereiche auf die Festplatte auslagert. Diese Technik wird Virtuelle Speicherverwaltung genannt.
Bestimmte physische Adressbereiche können aber in mehreren Prozessen im logischen Adressraum eingeblendet werden. Diese Technik wird auch Shared Memory genannt und ist eine Form der Interprozesskommunikation.
Eine Besonderheit stellen Adressen dar, die aus einer Basisadresse und einem Versatz in Form eines ganzzahligen Wertes – auch Offset genannt – gebildet werden. Um die tatsächliche Speicheradresse zu errechnen, wird der Versatz (Offset) zur Basisadresse addiert. So wird bei der Segmentierung im Real Mode der x86-Prozessorfamilie eine Speicherstelle nach dem Schema Segment:Offset angegeben. Zusätzlich zu der Segmentadresse (Segmentnummer * 16) wird der Offset addiert. Die echte Adresse lässt sich also mittels Adresse = (Segmentnummer·16) + Offset berechnen.
Im Protected Mode lässt sich die Startadresse des Segmentes aus dem Segment selector ermitteln. Zu dieser Segmentstartadresse wird dann der Offset addiert, um eine lineare logische Speicheradresse zu erhalten.
Siehe auch: Segmentierung (Speicherverwaltung)