記憶體模型
來自 cppreference.com
為 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 文件 關於 記憶體模型
|