Allocation de tableau et types de valeurs sur la pile par rapport au tas
Dans votre extrait de code :
int[] myIntegers; myIntegers = new int[100];
lorsque vous créez le tableau myIntegers en utilisant le mot-clé new, le tableau lui-même est alloué sur le tas, comme suggéré par le CLR. Cependant, les éléments entiers du tableau, étant des types valeur, ne sont pas encadrés.
Pile et variables locales
Toutes les variables locales d'une fonction, y compris les types valeur et Les types de référence sont alloués sur la pile. La différence entre les deux réside dans ce qui est stocké dans ces variables.
Exemple pour RefTypes et ValTypes
Considérez les types suivants :
class RefType { public int I; public string S; public long L; } struct ValType { public int I; public string S; public long L; }
La valeur de chaque type nécessite 16 octets de mémoire : 4 octets pour I, 4 octets pour la référence S (ou la référence réelle chaîne S pour ValType), et 8 octets pour L.
Si vous avez des variables locales de type RefType, ValType et int[], ils seraient alloués sur la pile comme suit :
Stack: 0-3 bytes: RefType variable 4-7 bytes: ValType variable 8-11 bytes: int[] variable
Disposition de la mémoire
Lors de l'attribution de valeurs à ces variables :
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;
les valeurs seront réparties dans la suite manière :
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`
Tas :
À l'adresse du tas de refType :
Au tas d'intArray adresse :
**Passing Arrays**
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!