内存模型
来自cppreference.com
为 C++ 抽象机器的目的定义了计算机内存存储的语义。
可为 C++ 程序所用的内存是字节 的一或多个连续序列。内存中的每个字节拥有唯一的地址。
目录 |
[编辑]字节
字节 是最小的可寻址内存单元。它被定义为相接的位序列,该序列大到足以保有
- 任何
UTF-8
编码单元(256 个相异值)和
| (C++23 前) |
| (C++23 起) |
与 C 相似,C++ 也支持 8 位或更大的字节。
char、unsignedchar 和 signedchar类型把一个字节用于存储和值表示。字节中的位数可作为 CHAR_BIT 或 std::numeric_limits<unsignedchar>::digits 访问。
[编辑]内存位置
一个内存位置 是一个标量类型非位域对象或非零长位域的最大相接序列的对象表示占据的存储。
注意:语言的各种功能特性,例如引用和虚函数,可能涉及到程序不可访问,但为实现所管理的额外内存位置。
struct S {char a;// 内存位置 #1int b :5;// 内存位置 #2int c :11, // 内存位置 #2(延续):0, d :8;// 内存位置 #3struct{int ee :8;// 内存位置 #4} e;} obj;// 对象 “obj” 由 4 个分离的内存位置组成
[编辑]缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
CWG 1953 | C++98 | 占据相同存储的多个对象会被视为不同的内存位置 | 内存位置现在指代存储 |
[编辑]参阅
内存模型的 C 文档 |