Модель памяти
Определяет семантику хранения данных в памяти компьютера для абстрактной машины C++.
Память, доступная программе на C++, представляет собой одну или несколько непрерывных последовательностей байтов. Каждый байт в памяти имеет уникальный адрес.
Байт
Байт — наименьшая адресуемая единица памяти. Он определяется как непрерывная последовательность битов, достаточно большая, чтобы хранить
- значение любой единицы кода
UTF-8(256 различных значений) и
| (до C++23) |
| (начиная с C++23) |
Как и C, C++ поддерживает байты размером 8 бит и более.
Типы char, unsignedchar и signedchar используют один байт как для хранения, так и для представления значения. Число битов в байте доступно как CHAR_BIT или std::numeric_limits<unsigned char>::digits.
Область памяти
Область памяти — это память, занимаемая представлением объекта либо объекта скалярного типа, не являющегося битовым полем, либо наибольшей непрерывной последовательностью битовых полей ненулевой длины.
Примечание: некоторые возможности языка, такие как ссылки и виртуальные функции, могут задействовать дополнительные области памяти, недоступные программам, но управляемые реализацией.
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
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроспективно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| CWG 1953 | C++98 | объекты, занимающие одну и ту же область памяти, считались разными областями памяти | область памяти теперь обозначает занимаемую память |
См. также
| Документация по C о модели памяти |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/memory_model