Spec-Zone.ru › C++

Модель памяти

Определяет семантику хранения данных в памяти компьютера для абстрактной машины 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API