J'entends / lis parfois à propos de .NET, par exemple "code managé" et "code non managé" mais je n'ai aucune idée de ce qu'ils sont et quelles sont leurs différences. Quelle est leur différence, par définition? Quelles sont les conséquences de l'utilisation de l'un ou l'autre? Cette distinction existe-t-elle uniquement dans .NET / Windows?
138
Réponses:
Code géré
Le code managé est ce que les compilateurs Visual Basic .NET et C # créent. Il fonctionne sur le CLR (Common Language Runtime), qui, entre autres, offre des services tels que le ramasse-miettes, la vérification de type au moment de l'exécution et la vérification des références. Alors, pensez-y comme: «Mon code est géré par le CLR».
Visual Basic et C # peuvent uniquement produire du code managé. Par conséquent, si vous écrivez une application dans l'un de ces langages, vous écrivez une application gérée par le CLR. Si vous écrivez une application dans Visual C ++ .NET, vous pouvez produire du code managé si vous le souhaitez, mais c'est facultatif.
Code non géré
Le code non managé se compile directement en code machine. Ainsi, selon cette définition, tout le code compilé par les compilateurs C / C ++ traditionnels est du «code non managé». De plus, comme il se compile en code machine et non en langage intermédiaire, il n'est pas portable.
Pas de gestion de la mémoire libre ou quoi que ce soit d'autre fourni par le CLR
Étant donné que vous ne pouvez pas créer de code non managé avec Visual Basic ou C #, dans Visual Studio tout le code non managé est écrit en C / C ++.
Mélanger les deux
Étant donné que Visual C ++ peut être compilé en code managé ou non managé, il est possible de mélanger les deux dans la même application. Cela brouille la ligne entre les deux et complique la définition, mais cela vaut la peine d'être mentionné pour que vous sachiez que vous pouvez toujours avoir des fuites de mémoire si, par exemple, vous utilisez une bibliothèque tierce avec du code non managé mal écrit.
Voici un exemple que j'ai trouvé en googlant :
la source
C'est plus général que .NET et Windows. Managed est un environnement dans lequel vous avez la gestion automatique de la mémoire, le garbage collection, la sécurité de type, ... tout le reste est non géré. Ainsi, par exemple .NET est un environnement géré et C / C ++ n'est pas géré.
la source
Le code géré est une différenciation inventée par Microsoft pour identifier le code de programme informatique qui nécessite et ne s'exécutera que sous la «gestion» d'une machine virtuelle Common Language Runtime (résultant en Bytecode).
http://en.wikipedia.org/wiki/Managed_code
http://www.developer.com/net/cplus/article.php/2197621/Managed-Unmanaged-Native-What-Kind-of-Code-Is-This.htm
la source