ホームページ > バックエンド開発 > C++ > ヒープとスタックの割り当て: 配列と値型はメモリ内のどこに存在するのか?

ヒープとスタックの割り当て: 配列と値型はメモリ内のどこに存在するのか?

Mary-Kate Olsen
リリース: 2025-01-02 17:53:44
オリジナル
675 人が閲覧しました

Heap vs. Stack Allocation: Where Do Arrays and Value Types Live in Memory?

ヒープとスタックの割り当て: 配列と値の型の詳細

提示されたコード スニペット内:

int[] myIntegers;
myIntegers = new int[100];
ログイン後にコピー

配列 myIntegers山盛り。一般的な考えに反して、配列内に格納される実際の整数値はボックス化されません。

スタックとヒープの割り当ての明確化

値型がヒープ上のスタック型と参照型は完全に正確ではありません。すべてのローカル変数とパラメータは、タイプに関係なく、スタック上に割り当てられます。主な違いは、次の変数に格納される内容にあります。

  • 値のタイプ: 実際の値は変数に直接格納されます。
  • リファレンスtype: ヒープに格納されている値への参照は、 variable.

値型と参照型のメモリ割り当て

値型と参照型はどちらも特定の量のメモリを占有します。提供されているサンプル型の場合、通常は 16 バイトです。 。このメモリ内:

  • 値型の場合、すべてのフィールドはそれぞれの値を直接保存します。
  • 参照型の場合、参照型フィールドはヒープ上にある値への参照を保存し、値-type フィールドには実際の値が保存されます。

例: スタックとヒープ割り当て

次のローカル変数を考慮します。

RefType refType;
ValType valType;
int[] intArray;
ログイン後にコピー

最初は、参照のみがスタック上に存在し、20 バイトを占有します。

 0 ┌───────────────────┐
   │     refType       │
 4 ├───────────────────┤
   │     valType       │
   │                   │
   │                   │
   │                   │
20 ├───────────────────┤
   │     intArray      │
24 └───────────────────┘
ログイン後にコピー

割り当て時これらの変数に値を代入します:

// Assign values to refType
// ...
// Assign values to valType
// ...
intArray = new int[4];
intArray[0] = 300;
// ...
intArray[3] = 303;
ログイン後にコピー

スタック表現は次のようになります。次のようなものです:

 0 ┌───────────────────┐
   │    0x4A963B68     │ -- heap address of `refType`
 4 ├───────────────────┤
   │       200         │ -- value of `valType.I`
   │    0x4A984C10     │ -- heap address of `valType.S`
   │    0x44556677     │ -- low 32-bits of `valType.L`
   │    0x00112233     │ -- high 32-bits of `valType.L`
20 ├───────────────────┤
   │    0x4AA4C288     │ -- heap address of `intArray`
24 └───────────────────┘
ログイン後にコピー

配列と値および参照型の両方が、前述のメモリ レイアウトでヒープの特定のセクションを占有します。

要約すると、配列 myIntegers はヒープ上に割り当てられますが、その中に格納されている個々の整数値はボックス化されません。これらは、追加のオブジェクトでラップする必要がなく、ヒープ上の割り当てられたメモリ内に直接格納されるだけです。

以上がヒープとスタックの割り当て: 配列と値型はメモリ内のどこに存在するのか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート