命名空间
变体
操作

内存模型

来自 cppreference.cn
< cpp‎ | 语言
 
 
C++ 语言
 
 

为 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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
CWG 1953 C++98 占用相同存储的对象被
认为是不同的内存位置
内存位置
现在指代存储

[编辑] 另请参阅

C 文档 关于 内存模型