Layout de memória de uma matriz .NET

Qual é o layout de memória de uma matriz .NET?

Tomemos, por exemplo, esta matriz:

Int32[] x = new Int32[10];

Eu entendo que a maior parte da matriz é assim:

0000111122223333444455556666777788889999

Onde cada caractere é um byte e os dígitos correspondem aos índices na matriz.

Além disso, eu sei que há uma referência de tipo e um índice de sincronização para todos os objetos, portanto, o acima pode ser ajustado para isso:

ttttssss0000111122223333444455556666777788889999
        ^
        +- object reference points here

Além disso, o comprimento da matriz precisa ser armazenado, portanto talvez isso seja mais correto:

ttttssssllll0000111122223333444455556666777788889999
        ^
        +- object reference points here

Isso está completo? Existem mais dados em uma matriz?

A razão pela qual estou perguntando é que estamos tentando estimar quanta memória duas representações diferentes na memória de um corpus de dados bastante grande terão e o tamanho das matrizes varia um pouco, portanto a sobrecarga pode ter um grande impacto em uma solução, mas talvez não tanto na outra.

Então, basicamente, para uma matriz, quanto de sobrecarga existe, essa é basicamente a minha pergunta.

E antes domatrizes são ruins Quando o esquadrão acorda, essa parte da solução é um tipo de coisa estática que compõe uma vez que é referência e que muitas vezes não é necessária aqui.

questionAnswers(4)

yourAnswerToTheQuestion