в принципе:
1. Как и в случае с шаблонами C++, сутью обобщений C# является тип типа.
Он определяет тип, и каждый его экземпляр является конкретным типом, поэтому его называют типом типа.
2. При создании экземпляра он делится на две ситуации:
Ссылочные типы и типы значений
Поскольку ссылочный тип по сути является указателем, то есть адресом памяти, количество байтов, используемых переменной-указателем, одинаково на машине с определенной длиной в битах. Например, 32-битная машина использует 4 байта.
Суть дженериков заключается в том, что они представляют собой тип определенного типа. После компиляции создается двоичный код, описывающий характеристики этого определения типа, который хранится в памяти.
Здесь мы сначала опишем определение типа и распределение памяти для созданных объектов после компиляции исходного кода. После компиляции исходного кода программный файл (например, exe-файл) должен быть запрограммирован и загружен в пространство памяти во время выполнения (современная ОС). использует сопоставление, логически занимая память, физически используя метод подкачки, используя какую часть данных перенести в физическую память);
При определении класса описание класса после компиляции (информация о том, какие члены данных, какие функции-члены, соответствующие разрешения и т. д.) образует часть exe-файла, который загружается в память после запуска. двоичные данные устанавливаются по адресу памяти 0x0001;
При создании экземпляра объекта класса это зависит от языка. В C++ объект создания экземпляра класса выделяет память в стеке; в C# объект создания экземпляра класса выделяет память в куче; (например, в 32-разрядной системе Windows объем памяти программы составляет 4 ГБ. В оставшейся памяти, кроме памяти, отображаемой exe, когда срок жизни созданного объекта превышает время жизни или он освобождается из кучи, возвращается пространство памяти). к процессу.
Аналогичным образом, общие закодированные двоичные данные содержатся в исполняемом файле и загружаются в память.
Когда создается экземпляр универсального шаблона, то есть когда компилируется определенный тип (обратите внимание, что процесс создания экземпляра универсального шаблона в C# выполняется во время компиляции, то есть созданный универсальный шаблон, используемый в коде. Для каждого конкретного типа двоичный код код генерируется во время компиляции, а сам двоичный код дженерика записывается в exe-файл). Сколько места должен занимать двоичный код каждого экземплярного типа в exe-файле?
В C# нам необходимо различать ссылочные типы и типы значений. Предположим, что универсальный экземпляр создает два ссылочных типа и два типа значений в исходном коде программы.
Затем для ссылочных типов:
В одном используется 4-байтовый указатель, а в двух — два указателя. Двоичные данные указывают на используемый тип (например, myClass в векторе
Для типов значений:
Типы значений включают в себя структуры и предопределенные типы данных. При создании экземпляров универсальных шаблонов с такими типами (например, вектор