A veces escucho / leo sobre eso cuando hablo de .NET, por ejemplo, "código administrado" y "código no administrado", pero no tengo idea de cuáles son y cuáles son sus diferencias. ¿Cuáles son sus diferencias, por definición? ¿Cuáles son las consecuencias de usar cualquiera de ellos? ¿Existe esta distinción solo en .NET / Windows?
138
Respuestas:
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 :
fuente
Esto es más general que .NET y Windows. Gestionado es un entorno donde tiene administración automática de memoria, recolección de basura, seguridad de tipos, ... no administrado es todo lo demás. Entonces, por ejemplo .NET es un entorno administrado y C / C ++ no está administrado.
fuente
El código administrado es una diferenciación acuñada por Microsoft para identificar el código del programa de computadora que requiere y solo se ejecutará bajo la "administración" de una máquina virtual Common Language Runtime (que resulta 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
fuente