Что делает "новое" ключевое слово в .net на самом деле?

Я знаю, что ключевое слово new вызывает конструктор класса, но на каком этапе мы выделяем память для класса?

В моем понимании это должно соответствовать методу GCHandle.Alloc(Object), но я не могу найти соединение.

Ответ 1

Новый оператор реализован в среде CLR. Он выделяет память из собранной кучи мусора и выполняет конструктор класса.

GCHandle.Alloc() не то же самое. Это использует отдельный механизм в GC для создания ссылок на объекты, ссылки, которые хранятся в отдельной таблице, и отсканированные в дополнение к объектным ссылкам, найденным обычно во время сбора мусора. Вы должны передать Alloc() существующую ссылку на объект, она добавляет другую. Полезно создавать слабые и фиксирующие ссылки и механизм, позволяющий неуправляемому коду хранить ссылку на управляемый объект и сохранять его в живых. класс gcroot < > template в С++/CLI использует его.

Ответ 2

Все для создания объекта скрыто за кодом newobj (или initobj для типов значений). Таким образом, полностью представляет собой описание реализации, как и где выделяется память, и как это связано с другими структурами управления памятью.