In C# you can create types where you control the layout and they are always stack allocated.
If you, for example, create an array of said struct type, the array's memory will be on the heap. And the structs will be stored in it. You can't assume a struct will be on the stack.