en principio:
1. Al igual que en las plantillas de C++, la esencia de los genéricos de C# es el tipo de tipo.
Define un tipo, y cada objeto instanciado del mismo es un tipo específico, por lo que se llama tipo de tipo.
2. Se divide en dos situaciones cuando se instancia:
Tipos de referencia y tipos de valor
Debido a que el tipo de referencia es esencialmente un puntero, que es una dirección de memoria, la cantidad de bytes utilizados por la variable del puntero es la misma en una máquina con una determinada longitud de bits. Por ejemplo, una máquina de 32 bits usa 4 bytes.
La esencia de los genéricos es como un tipo definido. Después de la compilación, habrá un código binario que describe las características de este tipo definido y se almacena en la memoria.
Aquí primero describimos la definición de tipo y la asignación de memoria de los objetos instanciados después de compilar el código fuente. Después de compilar el código fuente, se debe programar un archivo de programa (como un archivo exe) y cargarlo en el espacio de memoria durante la ejecución (sistema operativo moderno). usa mapeo, ocupando memoria lógicamente, usando físicamente el método de paginación, usando qué parte de los datos transferir esa parte de los datos a la memoria física);
Al definir una clase, la descripción de la clase después de la compilación (información sobre qué miembros de datos, qué funciones de los miembros, permisos respectivos, etc.) forma parte del archivo exe, que se carga en la memoria después de la ejecución. los datos binarios se establecen en la dirección de la memoria es 0x0001;
Al crear una instancia de un objeto de clase, depende del lenguaje. En C++, el objeto de instanciación de clase asigna memoria en la pila; en C#, el objeto de instanciación de clase asigna memoria en el montón que está en la memoria del programa; espacio (como en el sistema Windows de 32 bits, el espacio de memoria del programa es 4G. En la memoria restante distinta de la memoria asignada por el exe, cuando el objeto instanciado excede la vida útil o se libera del montón, se devuelve el espacio de memoria). al proceso.
De manera similar, los datos binarios codificados genéricos están contenidos en el archivo exe y se cargan en la memoria.
Cuando se crea una instancia de un genérico, es decir, cuando se compila un tipo específico (tenga en cuenta que el proceso de creación de instancias de un genérico en C# se realiza durante la compilación, es decir, el genérico instanciado utilizado en el código. Para cada tipo específico, binario El código binario se genera durante la compilación y el código binario del genérico en sí se escribe en el archivo exe). ¿Cuánto espacio debe ocupar el código binario de cada tipo instanciado en el archivo exe?
En C#, debemos distinguir entre tipos de referencia y tipos de valor. Supongamos que un genérico crea una instancia de dos tipos de referencia y dos tipos de valor en el código fuente del programa.
Luego para tipos de referencia:
Uno usa un puntero de 4 bytes y dos usan dos punteros. Los datos binarios apuntan al tipo utilizado (como myClass en vector<myClass>. myClass es un tipo de clase definido. Después de la compilación, los datos binarios se almacenan en un archivo exe. ) (la dirección relativa se convierte en una dirección de memoria después de cargarse en la memoria). Esto se debe a que el objeto instanciado del tipo de referencia se asigna en el montón y se ejecuta en tiempo de ejecución. En este momento, desde el puntero La dirección obtiene el binario. datos descritos por el tipo myClass, calcula el espacio de memoria ocupado por un objeto instanciado y lo asigna en el montón.
Para tipos de valor:
Los tipos de valores incluyen estructuras y tipos de datos predefinidos. Al crear instancias de genéricos con tales tipos (como vector<int>, vector<double>), se generarán datos binarios reales de las dos clases para representarlas, de modo que al crear instancias. sus objetos en el programa, es rápido (por supuesto, también se puede calcular y codificar en tiempo de ejecución como una referencia), pero el tipo de valor se asigna en la pila y se pierde flexibilidad para obtener Eficiencia, así que ejecute como esto)