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.