c# - son - uso de for en c sharp
¿Cuál es la diferencia entre el código administrado y no administrado, la memoria y el tamaño? (5)
Después de ver y escuchar mucho sobre el código administrado y no administrado, y sabiendo que la única diferencia es que la gestión es sobre CLR y no gestionado está fuera del CLR, me da mucha curiosidad saberlo en detalle. ¿De qué se trata, el código administrado y no administrado, la memoria y el tamaño?
¿Cómo puede el código que escribo en C # no ser administrado mientras este es el código de C # y cómo una memoria de tamaño no se administra? Un ejemplo y una pequeña idea sería útil.
El código administrado generalmente tiene una huella de memoria de tiempo de ejecución más alta que el código equivalente no administrado (nativo) equivalente.
Esta podría ser una respuesta muy larga, hablando de las muchas diferencias sutiles entre el código de máquina generado por un compilador de C y el código de máquina generado por el compilador de JIT desde un programa administrado. El tiempo suficiente para realmente requerir un libro, pero tales libros ya han sido escritos. Cualquier cosa de Jeffrey Richter, por ejemplo.
Lo mantendré corto y ágil, porque todas esas diferencias sutiles se reducen a la Regla Única:
El código administrado es un código que asigna memoria desde el montón recogido de basura.
Las aplicaciones que se ejecutan directamente bajo el sistema operativo se conocen como
aplicaciones no administradas
mientras que las aplicaciones que se ejecutan bajo el framework .net se conocen como
aplicaciones administradas
Managed Code se ejecuta en Application Domain y el código no administrado se ejecuta en el proceso del sistema operativo.
Respuesta corta:
- El código administrado es un código .NET (VB.NET, C # etc.) que usted escribe y compila en .NET CIL .
- El código no administrado es código que no está bajo .NET que se compila para dirigir el código de máquina.
Respuesta larga:
¿Qué es el código administrado?
Managed Code es lo que crean los compiladores de Visual Basic .NET y C #. Se compila en Lenguaje Intermedio (IL), no en código de máquina que podría ejecutarse directamente en su computadora. El CIL se guarda en un archivo llamado ensamblaje, junto con metadatos que describen las clases, los métodos y los atributos (como los requisitos de seguridad) del código que ha creado. Este ensamblado es la unidad de implementación de one-stop-shopping en el mundo .NET. Usted lo copia a otro servidor para implementar el ensamblado allí, y a menudo esa copia es el único paso requerido en la implementación.
El código administrado se ejecuta en Common Language Runtime. El tiempo de ejecución ofrece una amplia variedad de servicios para su código de ejecución. En el curso normal de los acontecimientos, primero carga y verifica el ensamblaje para asegurarse de que el CIL está bien. Luego, justo a tiempo, cuando se invocan los métodos, el tiempo de ejecución los arregla para que se compilen con el código de máquina adecuado para la máquina en la que se está ejecutando el ensamblaje, y almacena este código de máquina para utilizarlo la próxima vez que se llame al método. (Esto se llama Just In Time, o compilación JIT, o simplemente Jitting).
A medida que se ejecuta el ensamblaje, el tiempo de ejecución continúa proporcionando servicios tales como seguridad, administración de memoria, enhebrado y similares. La aplicación es administrada por el tiempo de ejecución.
Visual Basic .NET y C # solo pueden producir código administrado. Si está trabajando con esas aplicaciones, está haciendo código administrado. Visual C ++ .NET puede producir código administrado si lo desea: cuando crea un proyecto, seleccione uno de los tipos de aplicación cuyo nombre comience con .Managed., Como la aplicación .Managed C ++.
¿Qué es código no administrado?
El código no administrado es lo que usa antes de lanzar Visual Studio .NET 2002. Visual Basic 6, Visual C ++ 6, diablos, incluso ese compilador de C de 15 años que todavía puede tener en su disco duro todo el código producido no administrado. Se compiló directamente con el código de máquina que se ejecutó en la máquina donde lo compiló, y en otras máquinas, siempre que tengan el mismo chip, o casi lo mismo. No recibió servicios como la seguridad o la administración de la memoria de un tiempo de ejecución invisible; los obtuvo del sistema operativo. Y, lo que es más importante, los obtuvo del sistema operativo de forma explícita, solicitándolos, generalmente llamando a una API proporcionada en el SDK de Windows. Las aplicaciones no administradas más recientes obtuvieron servicios del sistema operativo a través de llamadas COM.
A diferencia de los otros lenguajes de Microsoft en Visual Studio, Visual C ++ puede crear aplicaciones no administradas. Cuando crea un proyecto y selecciona un tipo de aplicación cuyo nombre comienza con MFC, ATL o Win32, está creando una aplicación no administrada.
Esto puede provocar cierta confusión: cuando crea una aplicación .Managed C ++, el producto de compilación es un ensamblaje de CIL con una extensión .exe. Cuando crea una aplicación MFC, el producto de compilación es un archivo ejecutable de Windows de código nativo, también con una extensión .exe. El diseño interno de los dos archivos es completamente diferente. Puede usar el Desensamblador de Lenguaje Intermedio, ildasm, para mirar dentro de un ensamblaje y ver los metadatos y CIL. Intente señalar ildasm en un exe no administrado y se le informará que no tiene un encabezado CLR (Common Language Runtime) válido y no se puede desensamblar: la misma extensión, archivos completamente diferentes.
¿Qué hay de Native Code?
La frase código nativo se usa en dos contextos. Mucha gente lo usa como sinónimo de código no administrado: código creado con una herramienta más antigua, o elegido deliberadamente en Visual C ++, que no se ejecuta en el tiempo de ejecución, sino que se ejecuta de forma nativa en la máquina. Esta podría ser una aplicación completa, o podría ser un componente COM o DLL que se llama desde un código administrado utilizando COM Interop o PInvoke, dos poderosas herramientas que aseguran que pueda usar su código anterior cuando se mude al nuevo mundo. Prefiero decir .un código administrado. para este significado, porque enfatiza que el código no obtiene los servicios del tiempo de ejecución. Por ejemplo, Code Access Security en el código administrado evita que el código cargado desde otro servidor realice ciertas acciones destructivas. Si su aplicación llama a un código no administrado cargado desde otro servidor, no obtendrá esa protección.
El otro uso de la frase código nativo es describir el resultado del compilador JIT, el código máquina que realmente se ejecuta en el tiempo de ejecución. Está administrado, pero no es CIL, es código de máquina. Como resultado, no solo asuma que native = no administrado.
( Source )