Memory model
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-8unidad 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
|