Código administrado
El código administrado es lo que crean los compiladores de Visual Basic .NET y C #. Se ejecuta en el CLR (Common Language Runtime), que, entre otras cosas, ofrece servicios como recolección de basura, verificación de tipos en tiempo de ejecución y verificación de referencias. Entonces, piense en ello como: "Mi código está administrado por el CLR".
Visual Basic y C # solo pueden producir código administrado, por lo tanto, si está escribiendo una aplicación en uno de esos idiomas, está escribiendo una aplicación administrada por el CLR. Si está escribiendo una aplicación en Visual C ++ .NET, puede producir código administrado si lo desea, pero es opcional.
Código no administrado
El código no administrado compila directamente al código de la máquina. Entonces, según esa definición, todo el código compilado por los compiladores tradicionales de C / C ++ es 'código no administrado'. Además, dado que se compila en código máquina y no en un lenguaje intermedio, no es portátil.
Sin administración de memoria gratuita ni nada más que el CLR proporcione.
Como no puede crear código no administrado con Visual Basic o C #, en Visual Studio todo el código no administrado se escribe en C / C ++.
Mezclando los dos
Dado que Visual C ++ se puede compilar en código administrado o no administrado, es posible mezclar ambos en la misma aplicación. Esto borra la línea entre los dos y complica la definición, pero vale la pena mencionarlo para que sepa que aún puede tener pérdidas de memoria si, por ejemplo, está utilizando una biblioteca de terceros con algún código no administrado mal escrito.
Aquí hay un ejemplo que encontré buscando en Google :
#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;
}