Langage C# – La pile et le tas

Lors de l’exécution de l’application, les données contenues dans les variables sont stockées dans deux structures en mémoire, appelées la pile et le tas. Soit les instructions suivantes :
[cc lang= »csharp »]
string s = « azerty »;
int i = 5;
[/cc]

Voici une illustration du stockage des données en mémoire :

Pourquoi cette différence ? Parce que le type int est un type « valeur » et string est un type « référence ». Ainsi la variable s contient une référence mémoire à la laquelle se trouve la valeur de la variable et i contient la valeur de la variable.
Existe-t-il une autre différence entre les types « valeur » et les types « référence » ?

  • La valeur par défaut d’une variable de type « référence » est null. Il est alors toujours nécessaire d’initialiser la variable ou d’instancier la classe afin de pouvoir utiliser la variable, afin d’éviter la levée d’une exception du type NullReferenceException. Le type string est un type référence, ainsi que toute variable dont le type de données est une classe.
  • Les types « valeur » ont toujours une valeur par défaut :
    • Types numériques (sbyte, short, int, long, single, double, decimal, …) : 0
    • Enumérations : 0
    • Booléen : false
    • DateTime : 01/01/0001 00:00:00
    • Char :  »

Pourquoi est-il utile de connaître ces différences ?

  • Afin de comprendre les différences d’utilisation entre les deux catégories de types
  • Afin de comprendre l’apparition de types nullables (en 2005)
  • Afin de mieux comprendre la gestion de la mémoire avec le Garbage Collector
Étiquettes :

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j'alterne les missions de formation et d'ingénierie avec cette plateforme. J'écris ce blog pour transmettre mes connaissances à tout développeur, qu'il soit débutant ou expérimenté.