メモリモデル
From cppreference.com
C++の抽象マシンにおける、コンピューターのメモリーストレージのセマンティクスを定義します。
C++プログラムが利用できるメモリーは、1つ以上の連続した「バイト」シーケンスです。メモリー内の各バイトには、一意の「アドレス」があります。
目次 |
[編集] バイト
「バイト」は、メモリーの最小アドレス指定可能単位です。これは、以下の値を保持するのに十分な大きさの、連続したビットのシーケンスとして定義されます。
- 任意の
UTF-8コードユニット(256個の異なる値)の値、および
|
(C++23まで) |
|
(C++23から) |
Cと同様に、C++は8ビット以上のサイズのバイトをサポートしています。
型 char, unsigned char, および signed char は、ストレージと値表現の両方に1バイトを使用します。バイト内のビット数は、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ドキュメント
|