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

Define las semánticas del almacenamiento en memoria de computadora para el propósito de la máquina abstracta de C++.

La memoria disponible para un programa C++ es una o más secuencias contiguas de bytes . Cada byte en la memoria tiene una única dirección .

Contenidos

Byte

Un byte es la unidad de memoria direccionable más pequeña. Se define como una secuencia contigua de bits, lo suficientemente grande para contener

  • el valor de cualquier UTF-8 unidad de código (256 valores distintos) y de
(until C++23)
(since C++23)

Similar a C, C++ admite bytes de tamaños de 8 bits y superiores.

Los tipos char , unsigned char , y signed char utilizan un byte tanto para almacenamiento como para representación de valores . El número de bits en un byte es accesible como CHAR_BIT o std:: numeric_limits < unsigned char > :: digits .

Ubicación de memoria

Una ubicación de memoria es el almacenamiento ocupado por la representación del objeto de un objeto de tipo escalar que no es un campo de bits , o la secuencia contigua más grande de campos de bits de longitud no nula.

Nota: Varias características del lenguaje, como references y virtual functions , pueden involucrar ubicaciones de memoria adicionales que no son accesibles para los programas pero que son gestionadas por la implementación.

struct S
{
    char a;     // ubicación de memoria #1
    int b : 5;  // ubicación de memoria #2
    int c : 11, // ubicación de memoria #2 (continuación)
          : 0,
        d : 8;  // ubicación de memoria #3
    struct
    {
        int ee : 8; // ubicación de memoria #4
    } e;
} obj; // El objeto "obj" consiste en 4 ubicaciones de memoria separadas

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
CWG 1953 C++98 los objetos que ocupan el mismo almacenamiento se
consideraban como ubicaciones de memoria diferentes
la ubicación de memoria
ahora se refiere al almacenamiento

Véase también

Documentación de C para Modelo de memoria