内存模型
来自 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++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
CWG 1953 | C++98 | 占用相同存储的对象被 认为是不同的内存位置 |
内存位置 现在指代存储 |
[编辑] 另请参阅
C 文档 关于 内存模型
|