Структура создается не в куче, а в стеке, потому что это тип значения.
Это распространенное заблуждение, и оно полностью вводит в заблуждение. Структура, которая является элементом массива, создается в куче. Структура, которая является полем класса, создается в куче. Структура, которая является закрытой внешней переменной лямбды, создается в куче. Структуры создаются в куче все время. Структуры создаются в стеке только тогда, когда известно, что их переменные времена жизни короче, чем у метода, в котором они находятся. Очевидно, что они не могут быть созданы в стеке, если их времена жизни длиннее, чем у стека метода !.
Кроме того, все забывают регистры. Регистры не являются ни кучей, ни стеком. Ничто не мешает оптимизатору сгенерировать структуру как регистр, если оптимизатор решит, что запись в регистр стоит.
Но когда эта структура становится обнуляемой, это все еще тип значения?
Да. Обнуляемый тип - это тип значения. (Хотя он не соответствует ограничению типа значения универсального типа или метода и обладает специальным поведением бокса.)
Это все еще создано в стеке?
Если в куче был создан тип значения, не допускающий значения NULL, то и там будет создан тип NULL.
Мне нужна пустая структура, которая не генерирует мусор.
Если ненулевая структура не генерирует мусор, то и очищаемая структура тоже не будет.