web-dev-qa-db-fra.com

Capacité de pile en C #

Quelqu'un pourrait-il me dire quelle est la capacité de la pile en C #.

J'essaie de former un objet fermé maillé 3D en utilisant un tableau de 30 000 éléments.

49
George ARKIN

La taille de pile par défaut pour une application .NET est de 1 Mo (la valeur par défaut est 256 Ko pour les applications ASP.NET 32 bits et 512 Ko pour les applications ASP.NET 64 bits), mais vous pouvez modifier cela. Pour l'application, vous pouvez modifier la taille par défaut en modifiant l'en-tête PE de l'exécutable. Pour les threads que vous créez, vous pouvez utiliser la surcharge du constructeur qui prend une taille de pile.

Mais comme le souligne Anton Tyjhyy dans sa réponse, les tableaux sont des types de référence et sont donc situés sur le tas (même si le tableau contient un tas de types de valeurs).

71
Brian Rasmussen

Votre tableau vivra sur le tas, la taille de la pile n'est pas pertinente dans votre cas.

53
Anton Tykhyy

La taille de la pile est configurable et peut être définie de plusieurs manières différentes .

29
Dave Webb

Pour utiliser la pile pour stocker un tableau, vous devez utiliser du code dangereux avec des pointeurs et stackalloc pour allouer l'espace mémoire souhaité sur la pile.

5
Jan Prokes

Si vous souhaitez vérifier la valeur de votre assembly .NET actuel, vous pouvez le faire à l'aide de la commande ILDASM fournie avec l'invite de commandes Visual Studio. Une fois que vous avez démarré l'outil, ouvrez votre assemblage puis allez dans le menu View -> Headers. Faites maintenant défiler jusqu'à la section PE Optional Header (32 bit) dans la fenêtre Headers récemment ouverte. Vous verrez deux champs:

  1. Taille de la réserve de pile - Cela va de soi. Il s'agit de la taille de mémoire par défaut de la pile allouée à tout thread créé dans votre programme/application.
  2. Taille de la pile validée - l'espace de pile engagé est Citant Hans Passant de --- (ici )

Cet espace est réservé dans le fichier d'échange du système d'exploitation afin que la pile puisse toujours être échangée si nécessaire.

enter image description here

5
RBT