em princípio:
1. Semelhante aos modelos C++, a essência dos genéricos do C# é o tipo do tipo.
Ele define um tipo, e cada objeto instanciado dele é um tipo específico, por isso é chamado de tipo de tipo
2. É dividido em duas situações quando instanciado:
Tipos de referência e tipos de valor
Como o tipo de referência é essencialmente um ponteiro, que é um endereço de memória, o número de bytes usados pela variável de ponteiro é o mesmo em uma máquina com um determinado comprimento de bits. Por exemplo, uma máquina de 32 bits usa 4 bytes.
A essência dos genéricos é como um tipo de tipo definido. Após a compilação, haverá um código binário que descreve as características dessa definição de tipo, que é armazenado na memória.
Aqui descrevemos primeiro a definição de tipo e a alocação de memória de objetos instanciados após a compilação do código-fonte. Após a compilação do código-fonte, um arquivo de programa (como um arquivo exe) deve ser programado e carregado no espaço de memória durante a execução (sistema operacional moderno). usa mapeamento, ocupando memória logicamente, usando fisicamente o método de paginação, usando qual parte dos dados para transferir essa parte dos dados para a memória física);
Ao definir uma classe, a descrição da classe após a compilação (informações sobre quais membros de dados, quais funções de membro, respectivas permissões, etc.) faz parte do arquivo exe, que é carregado na memória após a execução. os dados binários são definidos no endereço da memória é 0x0001;
Ao instanciar um objeto de classe, isso depende da linguagem. Em C++, o objeto de instanciação de classe aloca memória na pilha; em C#, o objeto de instanciação de classe aloca memória no heap; espaço (como o sistema Windows de 32 bits, o espaço de memória do programa é 4G). Na memória restante diferente da memória mapeada pelo exe, quando o objeto instanciado excede o tempo de vida ou é liberado do heap, o espaço de memória é retornado. ao processo.
Da mesma forma, os dados binários codificados genéricos estão contidos no arquivo exe e carregados na memória.
Quando um genérico é instanciado, ou seja, quando um tipo específico é compilado (observe que o processo de instanciação de um genérico em C# é realizado durante a compilação, ou seja, o genérico instanciado usado no código, para cada tipo específico, binário o código é gerado durante a compilação e o código binário do próprio genérico é gravado no arquivo exe). Quanto espaço o código binário de cada tipo instanciado precisa ocupar no arquivo exe?
Em C#, precisamos distinguir entre tipos de referência e tipos de valor. Suponha que um genérico instancie dois tipos de referência e dois tipos de valor no código-fonte do programa.
Então, para tipos de referência:
Um usa um ponteiro de 4 bytes e dois usam dois ponteiros. Os dados binários apontam para o tipo usado (como myClass em vector
Para tipos de valor:
Os tipos de valor incluem estruturas e tipos de dados predefinidos. Ao instanciar genéricos com tais tipos (como vector