Memory model
| General topics | ||||||||||||||||
| Flow control | ||||||||||||||||
| Conditional execution statements | ||||||||||||||||
| Iteration statements (loops) | ||||||||||||||||
|
||||||||||||||||
| Jump statements | ||||||||||||||||
| Functions | ||||||||||||||||
| Function declaration | ||||||||||||||||
| Lambda function expression | ||||||||||||||||
inline
specifier
|
||||||||||||||||
| Dynamic exception specifications ( until C++17* ) | ||||||||||||||||
noexcept
specifier
(C++11)
|
||||||||||||||||
| Exceptions | ||||||||||||||||
| Namespaces | ||||||||||||||||
| Types | ||||||||||||||||
| Specifiers | ||||||||||||||||
|
||||||||||||||||
| Storage duration specifiers | ||||||||||||||||
| Initialization | ||||||||||||||||
| Expressions | ||||||||||||||||
| Alternative representations | ||||||||||||||||
| Literals | ||||||||||||||||
| Boolean - Integer - Floating-point | ||||||||||||||||
| Character - String - nullptr (C++11) | ||||||||||||||||
| User-defined (C++11) | ||||||||||||||||
| Utilities | ||||||||||||||||
| Attributes (C++11) | ||||||||||||||||
| Types | ||||||||||||||||
typedef
declaration
|
||||||||||||||||
| Type alias declaration (C++11) | ||||||||||||||||
| Casts | ||||||||||||||||
| Memory allocation | ||||||||||||||||
| Classes | ||||||||||||||||
| Class-specific function properties | ||||||||||||||||
|
||||||||||||||||
| Special member functions | ||||||||||||||||
|
||||||||||||||||
| Templates | ||||||||||||||||
| Miscellaneous | ||||||||||||||||
定义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; // 内存位置 #1 int b : 5; // 内存位置 #2 int c : 11, // 内存位置 #2(续) : 0, d : 8; // 内存位置 #3 struct { int ee : 8; // 内存位置 #4 } e; } obj; // 对象“obj”由4个独立的内存位置组成
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| CWG 1953 | C++98 |
占用相同存储空间的对象被
视为不同的内存位置 |
内存位置
现指存储空间 |
参见
|
C 文档
关于
内存模型
|