144 votes

Comment .NET framework n’alloue pas de mémoire pour OutOfMemoryException ?

En C++, il est effectivement possible de lever une exception en valeur sans allocation de mémoire sur un segment de mémoire, cette situation est donc logique. Dans .NET framework, mais est un type référence, par conséquent, il revient sur un segment de mémoire. Comment le .NET framework alloue de la mémoire pour lorsqu’il n’y a pas assez de mémoire pour créer un nouvel objet ?

163voto

Brian Rasmussen Points 68853

Il est alloué à l’avance par le runtime. Si vous explorez le tas de n’importe quel processus managé, vous trouverez une instance de cette exception.

Voici les exceptions préallouées d’une application Hello World :

42voto

Random832 Points 9199

Quand une condition de mémoire est rencontré à l'intérieur de l'environnement d'exécution, il appelle ThrowOutOfMemory. Cela appelle une Exception::GetOOMException, qui construit l'objet sur la pile, puis la copie d'une façon statique alloué par l'instance globale, qui est ensuite jeté.

Ce n'est pas l'Exception géré, si, il a des exceptions C++ déclaré dans ex.h. Les Exceptions C++ sont convertis pour la gestion des Exceptions dans clrex.cppqui contient le code spécifiquement pour jeter le préaffectés géré OutOfMemoryException, qui a été initialement alloué et construit en appdomain.cpp.

Remarque: Certains de ces fichiers sont volumineux et peut se bloquer votre navigateur pendant plusieurs secondes, il charge la coloration syntaxique.

Les sites d'appel que Tim Schmelter liée dans un commentaire sur l'autre réponse ne sont pas liées à l'exécution à court de mémoire et d'être incapables de construire un objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X