Maison >développement back-end >C++ >Pourquoi les tailles de pile C# sont-elles limitées à 1 Mo (32 bits) et 4 Mo (64 bits) ?
Comprendre la taille limitée de la pile de C# : 1 Mo (32 bits) et 4 Mo (64 bits)
Malgré l'abondance de RAM actuelle, la taille des piles C# reste plafonnée à 1 Mo pour les processus 32 bits et à 4 Mo pour les processus 64 bits. Cette limitation apparemment arbitraire découle de la conception historique de Windows NT.
La valeur par défaut d'origine de 1 Mo, définie par l'équipe de David Cutler, était une norme pour les applications natives créant souvent de grands cadres de pile pour gérer les chaînes et les tampons. Cette pratique, vulnérable aux attaques par débordement de tampon, a influencé la décision de restreindre la taille des trames de pile dans le code managé comme C#.
Alors que les applications .NET allouent principalement des chaînes et des tableaux sur le tas de collecte des ordures (GC), le maintien d'une pile de 1 Mo garantit la compatibilité avec le code natif. L'utilisation principale de la pile dans .NET est lors de la compilation JIT, ne consommant que quelques dizaines de kilo-octets.
Premières versions de l'espace de pile pré-alloué du Common Language Runtime (CLR), le réservant dans le fichier d'échange pour un échange fiable. Les systèmes d'exploitation modernes et l'augmentation de la RAM ont rendu cela inutile. Le CLR n'effectue plus de pré-allocation, ce qui réduit encore davantage le besoin de grandes tailles de pile.
En résumé, les limitations de taille reflètent le contexte historique et la compatibilité avec les programmes natifs. Les tailles actuelles, bien qu'apparemment petites, offrent suffisamment d'espace pour la plupart des applications C#, garantissant une compatibilité descendante, empêchant les dépassements de mémoire et maintenant une utilisation prévisible des ressources de compilation JIT.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!