2010-07-30 2 views
3

Comment les éléments sont-ils stockés dans des conteneurs dans .Net? Par exemple, un vecteur C++ stocke dans un ordre séquentiel, contrairement à List.
Comment sont-ils implémentés pour les conteneurs .Net (Array, ArrayList, ...)?
Merci.Comment les éléments sont-ils stockés dans des conteneurs dans .Net?

+0

duple possible: http://stackoverflow.com/questions/487202/memory-layout-of-a-net-array –

+0

Presque, mais il n'y a que pour le tableau, mais j'ai besoin de tous les conteneurs. –

Répondre

1

Cela dépend de l'élément. Mais un Vector C++ est équivalent à un C# List, et un List<T> C++ est équivalent à un C# LinkedList

Le C# ArrayList est à peu près, un C# List<object>

Wikipedia liste many data structures, et je vous suggère de jeter un coup d'oeil là, pour voir comment les différents sont mis en œuvre.

Alors:

C++  C#      How 
Vector  ArrayList/List  Array (sequential) 
List  LinkedList    Linked List (non-sequential, i.e. linked) 
+0

Merci, exactement ce que je ne veux pas –

1

Cela varie en fonction du conteneur. Étant donné que l'implémentation est propriétaire, il n'existe aucune spécification publique imposant la structure de données sous-jacente doit être.

Si vous êtes intéressé à prendre le temps, je l'ai utilisé les outils suivants avant de comprendre comment MS a mis en œuvre cette classe ou que:

  • Debugging avec les symboles de débogage Microsoft .NET Framework.
  • Inspection des assemblages avec réflecteur.
1

Dans .net, des conteneurs (même les tableaux) gérer tous accès. Vous n'utilisez pas de pointeurs pour travailler avec eux (sauf dans des cas extrêmement rares dans lesquels vous n'allez probablement jamais entrer), donc peu importe comment ils stockent les informations. Dans de nombreux cas, il n'est même pas spécifié comment les choses fonctionnent dans les coulisses, donc l'implémentation peut être changée en quelque chose de «meilleur» sans casser des trucs qui reposent sur ces détails pour une raison stupide. Enfin, les tableaux stockent leurs entrées de manière séquentielle - avec la remarque que pour les objets de type référence (tout ce qui n'est pas une structure), "entrées" sont les références par opposition aux objets eux-mêmes. Les données pourraient être n'importe où dans la mémoire. Pensez-y plutôt à un tableau de références qu'à un tableau d'objets. ArrayLists, étant basé sur des tableaux, devrait stocker leurs affaires de la même manière.

Questions connexes