Namespaces
Variants

Memory model

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Definiert die Semantik der Computerspeicherung für den Zweck der C++ abstrakten Maschine.

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 .

Inhaltsverzeichnis

Byte

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

  • der Wert eines beliebigen UTF-8 Code-Elements (256 verschiedene Werte) und von
(bis C++23)
(seit C++23)

Ähnlich wie C unterstützt C++ Bytes mit Größen von 8 Bit 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 zugänglich als CHAR_BIT oder std:: numeric_limits < unsigned char > :: digits .

Speicherort

Ein memory location ist der Speicherplatz, der von der object representation entweder eines Objekts vom scalar type , das kein bit-field ist, oder der größten zusammenhängenden Folge von Bit-Feldern mit nicht-null Länge belegt wird.

Hinweis: Verschiedene Merkmale der Sprache, wie z.B. references und virtual functions , können zusätzliche Speicherbereiche betreffen, die für Programme nicht zugänglich sind, aber von der Implementierung verwaltet werden.

struct S
{
    char a;     // Speicherplatz #1
    int b : 5;  // Speicherplatz #2
    int c : 11, // Speicherplatz #2 (fortgesetzt)
          : 0,
        d : 8;  // Speicherplatz #3
    struct
    {
        int ee : 8; // Speicherplatz #4
    } e;
} obj; // Das Objekt „obj“ besteht aus 4 separaten Speicherplätzen

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 Speicher belegen, wurden
als unterschiedliche Speicherorte betrachtet
Speicherort bezieht sich
nun auf Speicher

Siehe auch

C-Dokumentation für Speichermodell