Capacité d'empilage en C#
Quelqu'un pourrait-il me dire quelle est la capacité d'empilage est en C#.
Je suis en train de former un maillage 3D objet fermé à l'aide d'un tableau de 30 000 articles.
- Vous pourriez juste besoin de tester vous-même en mettant des milliards de points et de voir quand il se bloque?
- Un étroitement liés à la question est la taille de la Pile sous Mono.
Vous devez vous connecter pour publier un commentaire.
La taille de pile par défaut pour un .NET est de 1 MO (valeur par défaut est de 256 KO pour la version 32 bits ASP.NET apps et de 512 KO pour la version 64 bits ASP.NET apps), mais vous pouvez changer 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 la pile.
Mais comme Anton Tyjhyy le souligne dans sa réponse, les tableaux sont des types référence et donc située sur le tas (même si le tableau qui arrive à tenir un tas de types de valeur).
stackalloc
. En outre, tout simplement parce que quelque chose est un type de référence ne signifie pas nécessairement qu'il sera alloué sur la pile ou le tas, elle varie en fonction de la mise en œuvre de la CLR et dans le .NET mise en œuvre, il varie dans quelques cas particuliers (de la taille, du type et de la portée).Votre tableau sera en direct sur le tas, la taille de la pile n'est pas pertinent dans votre cas.
La taille de la pile est configurable et peut être définie de plusieurs manières différentes.
À l'utilisation de la pile pour stocker un tableau, vous devez utiliser le code unsafe avec des pointeurs et stackalloc pour allouer de la mémoire souhaitée de l'espace sur la pile.
Si vous voulez vérifier la valeur de votre actuel .NET de l'assemblée, alors vous pouvez le faire en utilisant
ILDASM
commande qui vient avec invite de commande Visual Studio. Une fois que vous avez commencé à l'outil, ouvrez votre assemblée et ensuite aller àView -> Headers
menu. Maintenant, faites défiler versPE Optional Header (32 bit)
dans la section nouvellement ouvertHeaders
fenêtre. Vous verrez deux champs: