en principe:
1. Semblable aux modèles C++, l’essence des génériques C# est le type de type.
Il définit un type, et chaque objet instancié est un type spécifique, on l'appelle donc un type de type
2. Il se divise en deux situations lorsqu'il est instancié :
Types de référence et types de valeur
Étant donné que le type de référence est essentiellement un pointeur, qui est une adresse mémoire, le nombre d'octets utilisés par la variable pointeur est le même sur une machine avec une certaine longueur de bits. Par exemple, une machine 32 bits utilise 4 octets.
L'essence des génériques est en tant que type de type défini. Après compilation, il y aura un code binaire décrivant les caractéristiques de cette définition de type, qui est stocké en mémoire.
Ici, nous décrivons d'abord la définition du type et l'allocation de mémoire des objets instanciés après la compilation du code source. Une fois le code source compilé, un fichier programme (tel qu'un fichier exe) doit être programmé et chargé dans l'espace mémoire pendant l'exécution (système d'exploitation moderne). utilise le mappage, occupant logiquement la mémoire, utilisant physiquement la méthode de pagination, utilisant quelle partie des données transférer cette partie des données dans la mémoire physique);
Lors de la définition d'une classe, la description de la classe après compilation (informations sur les données membres, les fonctions des membres, les autorisations respectives, etc.) fait partie du fichier exe, qui est chargé dans la mémoire après l'exécution. les données binaires sont définies à l'adresse de la mémoire est 0x0001 ;
Lors de l'instanciation d'un objet de classe, cela dépend du langage. En C++, l'objet d'instanciation de classe alloue de la mémoire sur la pile ; en C#, l'objet d'instanciation de classe alloue de la mémoire sur le tas ; Espace (tel que le système Windows 32 bits, l'espace mémoire du programme est de 4 Go). Dans la mémoire restante autre que la mémoire mappée par l'exe, lorsque l'objet instancié dépasse la durée de vie ou est libéré du tas, l'espace mémoire est renvoyé. au processus.
De même, les données binaires codées génériques sont contenues dans le fichier exe et chargées en mémoire.
Lorsqu'un générique est instancié, c'est-à-dire lorsqu'un type spécifique est compilé (notez que le processus d'instanciation d'un générique en C# est effectué lors de la compilation, c'est-à-dire le générique instancié utilisé dans le code, pour chaque type spécifique, binaire le code est généré lors de la compilation et le code binaire du générique lui-même est écrit dans le fichier exe). Combien d'espace le code binaire de chaque type instancié doit-il occuper dans le fichier exe ?
En C#, nous devons faire la distinction entre les types référence et les types valeur. Supposons qu’un générique instancie deux types référence et deux types valeur dans le code source du programme.
Ensuite, pour les types de référence :
L'un utilise un pointeur de 4 octets et l'autre deux pointeurs. Les données binaires pointent vers le type utilisé (comme myClass dans vector
Pour les types de valeur :
Les types de valeur incluent des structures et des types de données prédéfinis. Lors de l'instanciation de génériques avec de tels types (tels que vector