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

Définit la sémantique du stockage en mémoire informatique pour les besoins de la machine abstraite C++.

La mémoire disponible pour un programme C++ est une ou plusieurs séquences contiguës d' octets . Chaque octet en mémoire possède une adresse unique.

Table des matières

Octet

Un octet est la plus petite unité adressable de mémoire. Il est défini comme une séquence contiguë de bits, suffisamment grande pour contenir

  • la valeur de toute UTF-8 unité de code (256 valeurs distinctes) et de
(jusqu'en C++23)
(depuis C++23)

Similairement au C, le C++ prend en charge des octets de tailles 8 bits et supérieures.

Les types char , unsigned char , et signed char utilisent un octet pour le stockage et la représentation de la valeur . Le nombre de bits dans un octet est accessible via CHAR_BIT ou std:: numeric_limits < unsigned char > :: digits .

Emplacement mémoire

Un emplacement mémoire est le stockage occupé par la représentation d'objet d'un objet de type scalaire qui n'est pas un champ de bits , ou la plus grande séquence contiguë de champs de bits de longueur non nulle.

Remarque : Diverses fonctionnalités du langage, telles que les références et les fonctions virtuelles , peuvent impliquer des emplacements mémoire supplémentaires qui ne sont pas accessibles aux programmes mais sont gérés par l'implémentation.

struct S
{
    char a;     // emplacement mémoire #1
    int b : 5;  // emplacement mémoire #2
    int c : 11, // emplacement mémoire #2 (suite)
          : 0,
        d : 8;  // emplacement mémoire #3
    struct
    {
        int ee : 8; // emplacement mémoire #4
    } e;
} obj; // L'objet « obj » est constitué de 4 emplacements mémoire distincts

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
CWG 1953 C++98 les objets occupant le même stockage étaient
considérés comme des emplacements mémoire différents
l'emplacement mémoire
fait maintenant référence au stockage

Voir aussi

Documentation C pour Modèle de mémoire