Структуры всегда хранятся на стеке, когда они являются локальными переменными в функции.
Структуры могут храниться в куче в следующих случаях:
Типы значений (структуры, перечисления, базовые типы типа Int, Bool и т.д.) всегда хранятся на стеке, когда они являются локальными переменными. Ни в каком виде типы значений не могут храниться на стеке, если являются свойством класса или элементом контейнера, хранящегося в куче.