what visual studio net microsoft language framework common .net windows unmanaged managed

.net - net - visual studio what is clr



Diferencia entre "administrado" y "no administrado" (4)

Código Administrado

El código administrado es lo que crean los compiladores de Visual Basic .NET y C #. Se ejecuta en CLR (Common Language Runtime), que, entre otras cosas, ofrece servicios como recolección de basura, comprobación de tipos en tiempo de ejecución y verificación de referencias. Por lo tanto, piense en ello como "Mi código está administrado por 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 generar código administrado si lo desea, pero es opcional.

Código no administrado

El código no administrado se compila directamente en el código de máquina. Entonces, según esa definición, todo el código compilado por los compiladores C / C ++ tradicionales 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 que el CLR ofrezca.

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

Como Visual C ++ se puede compilar con código administrado o no administrado, es posible mezclar los dos 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é en googling :

#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; }

Oigo / leo al respecto cuando hablo de .NET, por ejemplo, "código administrado" y "código no administrado", pero no tengo idea de qué son y cuáles son sus diferencias. ¿Cuál es su diferencia, por definición? ¿Cuáles son las consecuencias de usar cualquiera de ellos? ¿Esta distinción existe en .NET / Windows solamente?


El código administrado es el código que se escribe para apuntar a los servicios del entorno de ejecución del tiempo de ejecución administrado, como Common Language Runtime en .Net Technology.

No se puede acceder al código administrado que se ejecuta en Common Language Runtime fuera del entorno de tiempo de ejecución, ni tampoco se puede llamar directamente desde fuera del entorno de tiempo de ejecución. Se refiere a un contrato de cooperación entre el código de ejecución nativa y el tiempo de ejecución. Ofrece servicios como recolección de basura, comprobación de tipos en tiempo de ejecución, verificación de referencias, etc. Al utilizar código administrado, puede evitar muchos errores típicos de programación que conducen a agujeros de seguridad y aplicaciones inestables, además, muchas tareas de programación improductivas son automáticamente atendidas, tales como comprobación de seguridad de tipo, gestión de memoria, destrucción de objetos no utilizados, etc.

¿Qué es código no administrado?

El código no administrado se compila directamente en el código de máquina y es ejecutado directamente por el sistema operativo. El código generado se ejecuta de forma nativa en el procesador host y el procesador ejecuta directamente el código generado por el compilador. Siempre se compila para dirigirse a una arquitectura específica y solo se ejecutará en la plataforma deseada. Por lo tanto, si desea ejecutar el mismo código en una arquitectura diferente, tendrá que volver a compilar el código utilizando esa arquitectura en particular.

Los archivos ejecutables no administrados son básicamente una imagen binaria, código x86, directamente cargados en la memoria. Este enfoque normalmente da como resultado una ejecución de código más rápida, pero el diagnóstico y la recuperación de errores pueden ser difíciles y llevar mucho tiempo en la mayoría de los casos. El programador debe ocuparse de la asignación de memoria, tipo de seguridad, etc., y esto conducirá a un código no administrado propenso a fugas de memoria como desbordamientos de búfer, anulaciones de puntero, etc.

Todo el código compilado por los compiladores C / C ++ tradicionales son código no administrado. Los componentes COM, las interfaces ActiveX y las funciones API de Win32 son ejemplos de código no administrado. El código administrado es código escrito en muchos lenguajes de programación de alto nivel que están disponibles para su uso con Microsoft .NET Framework, incluidos VB.NET, C #, J #, JScript.NET, etc. Dado que Visual C ++ se puede compilar en código administrado o no administrado es posible mezclar los dos en la misma aplicación.



Esto es más general que .NET y Windows. Managed es un entorno en el que tiene gestión de memoria automática, recolección de basura, seguridad de tipos, ... no gestionado es todo lo demás. Entonces, por ejemplo, .NET es un entorno administrado y C / C ++ no está administrado.