Namensräume
Varianten
Aktionen

Speichermodell

Von cppreference.com
< cpp‎ | Sprache
 
 
C++ Sprache
Allgemeine Themen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

Definiert die Semantik des Computerspeichers für die Zwecke der C++-Abstraktionsmaschine.

Der einem C++-Programm zur Verfügung stehende Speicher besteht aus einer oder mehreren zusammenhängenden Sequenzen von Bytes. Jedes Byte im Speicher hat eine eindeutige Adresse.

Inhalt

[bearbeiten] Byte

Ein Byte ist die kleinste adressierbare Speichereinheit. Es ist definiert als eine zusammenhängende Sequenz von Bits, die groß genug ist, um

  • den Wert einer beliebigen `UTF-8`-Code-Einheit (256 verschiedene Werte) und von
(bis C++23)
(seit C++23)

Ähnlich wie C unterstützt C++ Bytes mit Größen von 8 Bits und mehr.

Die Typen char, unsigned char und signed char verwenden ein Byte sowohl für die Speicherung als auch für die Wertdarstellung. Die Anzahl der Bits in einem Byte ist als CHAR_BIT oder std::numeric_limits<unsigned char>::digits zugänglich.

[bearbeiten] Speicheradresse

Eine Speicheradresse ist der Speicherplatz, der von der Objektdarstellung eines Objekts eines skalaren Typs, das kein Bitfeld ist, oder die größte zusammenhängende Sequenz von Bitfeldern nicht-nuller Länge belegt.

Hinweis: Verschiedene Sprachmerkmale wie Referenzen und virtuelle Funktionen können zusätzliche Speicheradressen beinhalten, die für Programme nicht zugänglich sind, aber von der Implementierung verwaltet werden.

struct S
{
    char a;     // memory location #1
    int b : 5;  // memory location #2
    int c : 11, // memory location #2 (continued)
          : 0,
        d : 8;  // memory location #3
    struct
    {
        int ee : 8; // memory location #4
    } e;
} obj; // The object “obj” consists of 4 separate memory locations

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
CWG 1953 C++98 Objekte, die denselben Speicherplatz belegen, wurden
als unterschiedliche Speicheradressen betrachtet
Speicheradresse
bezieht sich nun auf Speicherplatz

[bearbeiten] Siehe auch

C-Dokumentation für Speichermodell