名前空間
変種
操作

メモリモデル

From cppreference.com
< cpp‎ | language
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

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ドキュメント
English 日本語 中文(简体) 中文(繁體)