Memory model
Определяет семантику хранения данных в компьютерной памяти для целей абстрактной машины C++.
Память, доступная программе на C++, представляет собой одну или несколько непрерывных последовательностей байтов . Каждый байт в памяти имеет уникальный адрес .
Содержание |
Байт
Байт — это наименьшая адресуемая единица памяти. Он определяется как непрерывная последовательность битов, достаточно большая для хранения
-
значение любого
UTF-8кодового юнита (256 различных значений) и
|
(до C++23) |
|
(начиная с C++23) |
Подобно C, C++ поддерживает байты размером 8 бит и больше.
Типы types char , unsigned char и signed char используют один байт для хранения и представления значения . Количество битов в байте доступно как CHAR_BIT или std:: numeric_limits < unsigned char > :: digits .
Расположение в памяти
Область памяти — это хранилище, занимаемое объектным представлением либо объекта скалярного типа , не являющегося битовым полем , либо наибольшей непрерывной последовательности битовых полей ненулевой длины.
Примечание: Различные особенности языка, такие как references и virtual functions , могут затрагивать дополнительные области памяти, которые недоступны программам, но управляются реализацией.
struct S { char a; // область памяти #1 int b : 5; // область памяти #2 int c : 11, // область памяти #2 (продолжение) : 0, d : 8; // область памяти #3 struct { int ee : 8; // область памяти #4 } e; } obj; // Объект «obj» состоит из 4 отдельных областей памяти
Отчеты о дефектах
Следующие отчеты о дефектах, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| CWG 1953 | C++98 |
объекты, занимающие одну и ту же память,
рассматривались как разные области памяти |
область памяти
теперь относится к хранилищу |
Смотрите также
|
C documentation
для
Memory model
|