命名空间
变体
操作

内存模型

来自 cppreference.cn
< cpp‎ | language
 
 
C++ 语言
通用主题
流程控制
条件执行语句
if
迭代语句(循环)
for
范围 for (C++11)
跳转语句
函数
函数声明
Lambda 函数表达式
inline 说明符
动态异常规范 (直到 C++17*)
noexcept 说明符 (C++11)
异常
命名空间
类型
说明符
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
存储期说明符
初始化
 
 

为 C++ 抽象机定义计算机内存存储的语义。

C++ 程序可用的内存是一个或多个连续的字节序列。内存中的每个字节都有唯一的地址

目录

[编辑] 字节

字节是最小的可寻址内存单元。它被定义为连续的位序列,足够大以容纳

  • 任何 UTF-8 代码单元的值(256 个不同的值)和
(直到 C++23)
(自 C++23 起)

与 C 类似,C++ 支持 8 位及更大的字节大小。

类型 charunsigned charsigned char 使用一个字节进行存储和值表示。字节中的位数可通过 CHAR_BITstd::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 文档 关于 内存模型