Em C #, os valores em uma Lista <estrutura> estão em caixas?

Suponha que declaro uma lista genérica contendo valores de um tipo struct:

struct MyStruct {
    public MyStruct(int val1, decimal val2) : this() {
        Val1 = val1;
        Val2 = val2;
    }
    public int Val1 {get; private set;}
    public decimal Val2 {get; private set;}
}

List<MyStruct> list;

A lista <> armazena cada valor individual como uma estrutura em caixa, alocada individualmente no heap? Ou é mais inteligente que isso?