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