スタックとヒープの配列割り当てと値の型
コード スニペット内:
int[] myIntegers; myIntegers = new int[100];
new キーワードを使用して配列 myIntegers を作成すると、配列自体がヒープ上に割り当てられます。 CLR。ただし、値型である配列内の整数要素はボックス化されません。
スタック変数とローカル変数
関数内のすべてのローカル変数 (値型と値型を含む)参照型はスタック上に割り当てられます。 2 つの違いは、これらの変数に格納される内容にあります。
RefType とValTypes
次の型を考えてみましょう:
class RefType { public int I; public string S; public long L; } struct ValType { public int I; public string S; public long L; }
各型の値には 16 バイトのメモリが必要です: I に 4 バイト、S 参照に 4 バイト (または実際のValType の場合は S 文字列)、L の場合は 8 バイトです。
タイプ RefType のローカル変数がある場合、 ValType および int[] は、次のようにスタック上に割り当てられます:
Stack: 0-3 bytes: RefType variable 4-7 bytes: ValType variable 8-11 bytes: int[] variable
メモリ レイアウト
これらの変数に値を割り当てるとき:
refType = new RefType(); refType.I = 100; refType.S = "refType.S"; refType.L = 0x0123456789ABCDEF; valType = new ValType(); valType.I = 200; valType.S = "valType.S"; valType.L = 0x0011223344556677; intArray = new int[4]; intArray[0] = 300; intArray[1] = 301; intArray[2] = 302; intArray[3] = 303;
値は次のように分布します。方法:
Stack: 0-3 bytes: Heap address of `refType` 4-7 bytes: Value of `valType.I` 8-11 bytes: Heap address of `valType.S` 12-15 bytes: Low 32-bits of `valType.L` 16-19 bytes: High 32-bits of `valType.L` 20-23 bytes: Heap address of `intArray`
ヒープ:
refType のヒープアドレス:
intArray のヒープ上address:
**Passing Arrays**
以上がC# では、配列と値型はスタックとヒープにどのように割り当てられますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。