Quelle est la disposition de la mémoire d'un tableau .NET?Disposition de la mémoire d'un tableau .NET
Prenez par exemple ce tableau:
Int32[] x = new Int32[10];
Je comprends que la majeure partie du tableau est comme ceci:
0000111122223333444455556666777788889999
où chaque caractère est un octet, et les chiffres correspondent à des indices en le tableau.
De plus, je sais qu'il ya une référence de type, et un indice de syncblock-pour tous les objets, de sorte que le ci-dessus peut être ajustée à ceci:
ttttssss0000111122223333444455556666777788889999
^
+- object reference points here
De plus, la longueur du tableau doit être stocké, donc c'est peut-être plus correct:
ttttssssllll0000111122223333444455556666777788889999
^
+- object reference points here
Est-ce que c'est complet? Y a-t-il plus de données dans un tableau? La raison pour laquelle je pose cette question est que nous essayons d'estimer la quantité de mémoire qu'une ou plusieurs représentations en mémoire d'un corpus de données assez volumineux prendront et que la taille des tableaux varie beaucoup, les frais généraux peuvent avoir un impact important dans une solution, mais peut-être pas autant dans l'autre.
Donc, fondamentalement, pour un tableau, combien y a-t-il de frais généraux, c'est essentiellement ma question. Et avant que les tableaux soient mauvais squad se réveille, cette partie de la solution est une construction statique une fois-référence-souvent type de chose donc l'utilisation de listes extensibles n'est pas nécessaire ici.
Juste un petit mot: le syncblock vient avant la référence de type de méthode. La variable contient un pointeur (référence) à la référence de type de méthode ('tttt' ci-dessus), en ignorant la partie syncblock. La disposition ressemble en fait à 'ssssttttllll000011 ... 9999NULL' pour les tableaux sans dimensions spécifiques ou limites inférieures spécifiques. – Abel