内存模型
来自 cppreference.cn
为 C++ 抽象机定义计算机内存存储的语义。
C++ 程序可用的内存是一个或多个连续的字节序列。内存中的每个字节都有唯一的地址。
目录 |
[编辑] 字节
字节是最小的可寻址内存单元。它被定义为连续的位序列,足够大以容纳
- 任何
UTF-8
代码单元的值(256 个不同的值)和
|
(直到 C++23) |
|
(自 C++23 起) |
与 C 类似,C++ 支持 8 位及更大的字节大小。
类型 char、 unsigned char 和 signed char 使用一个字节进行存储和值表示。字节中的位数可通过 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 文档 关于 内存模型
|