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 :
#using <mscorlib.dll>
using namespace System;
#include "stdio.h"
void ManagedFunction()
{
printf("Hello, I'm managed in this section\n");
}
#pragma unmanaged
UnmanagedFunction()
{
printf("Hello, I am unmanaged through the wonder of IJW!\n");
ManagedFunction();
}
#pragma managed
int main()
{
UnmanagedFunction();
return 0;
}