ヒープとスタックの割り当て: 配列と値の型の詳細
提示されたコード スニペット内:
int[] myIntegers; myIntegers = new int[100];
配列 myIntegers は山盛り。一般的な考えに反して、配列内に格納される実際の整数値はボックス化されません。
スタックとヒープの割り当ての明確化
値型がヒープ上のスタック型と参照型は完全に正確ではありません。すべてのローカル変数とパラメータは、タイプに関係なく、スタック上に割り当てられます。主な違いは、次の変数に格納される内容にあります。
値型と参照型のメモリ割り当て
値型と参照型はどちらも特定の量のメモリを占有します。提供されているサンプル型の場合、通常は 16 バイトです。 。このメモリ内:
例: スタックとヒープ割り当て
次のローカル変数を考慮します。
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 サイトの他の関連記事を参照してください。