Maison > développement back-end > C++ > Allocation de tas ou de pile : où se trouvent les tableaux et les types de valeur en mémoire ?

Allocation de tas ou de pile : où se trouvent les tableaux et les types de valeur en mémoire ?

Mary-Kate Olsen
Libérer: 2025-01-02 17:53:44
original
648 Les gens l'ont consulté

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

Allocation de tas et de pile : décomposition des tableaux et des types de valeurs

Dans l'extrait de code présenté :

int[] myIntegers;
myIntegers = new int[100];
Copier après la connexion

le tableau myIntegers est généré sur le tas. Contrairement à la croyance populaire, les valeurs entières réelles stockées dans le tableau ne sont pas encadrées.

Clarifier l'allocation de la pile et du tas

L'idée fausse courante selon laquelle les types de valeurs sont alloués sur le Les types de pile et de référence sur le tas ne sont pas entièrement précis. Toutes les variables et paramètres locaux, quel que soit leur type, sont alloués sur la pile. La distinction clé réside dans ce qui est stocké dans ces variables :

  • Types de valeur :La valeur réelle est stockée directement dans la variable.
  • Référence types : Une référence à la valeur stockée sur le tas est stockée dans le variable.

Allocation de mémoire pour les types valeur et référence

Les types valeur et référence occupent une quantité spécifique de mémoire, généralement 16 octets pour les exemples de types fournis. . Dans cette mémoire :

  • Pour les types valeur, tous les champs stockent directement leurs valeurs respectives.
  • Pour les types référence, les champs de type référence stockent des références aux valeurs situées sur le tas, tandis que la valeur Les champs de type stockent leurs valeurs réelles.

Exemple : Stack et Heap Allocation

Considérez les variables locales suivantes :

RefType refType;
ValType valType;
int[] intArray;
Copier après la connexion

Initialement, seules leurs références résident sur la pile, occupant 20 octets :

 0 ┌───────────────────┐
   │     refType       │
 4 ├───────────────────┤
   │     valType       │
   │                   │
   │                   │
   │                   │
20 ├───────────────────┤
   │     intArray      │
24 └───────────────────┘
Copier après la connexion

Lors de l'attribution valeurs à ces variables :

// Assign values to refType
// ...
// Assign values to valType
// ...
intArray = new int[4];
intArray[0] = 300;
// ...
intArray[3] = 303;
Copier après la connexion

La représentation de la pile serait ressembler :

 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 └───────────────────┘
Copier après la connexion

Le tableau ainsi que les types valeur et référence occupent des sections spécifiques du tas, avec des dispositions de mémoire comme décrit précédemment.

En résumé, le tableau myIntegers est alloué sur le tas, tandis que les valeurs entières individuelles qui y sont stockées ne sont pas encadrées. Ils sont simplement stockés directement dans la mémoire allouée sur le tas, sans qu'il soit nécessaire de les envelopper dans des objets supplémentaires.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal