Compartilhar via


O que é "código gerenciado"?

Ao trabalhar com o .NET, você geralmente encontrará o termo "código gerenciado". Este artigo explica o que significa código gerenciado e fornece informações adicionais sobre ele.

Para simplificar, o código gerenciado é apenas isso: código cuja execução é gerenciada por um runtime. Nesse caso, o runtime em questão é chamado de common language runtime ou CLR, independentemente da implementação (por exemplo, Mono, .NET Framework ou .NET Core/.NET 5+). O CLR é responsável por receber o código gerenciado, compilá-lo em código de máquina e então executá-lo. Além disso, o runtime fornece vários serviços importantes, como gerenciamento automático de memória, limites de segurança e segurança de tipo.

Contraste isso com a maneira como você executaria um programa C/C++, também chamado de "código não gerenciado". No mundo não gerenciado, o programador é responsável por praticamente tudo. O programa real é, essencialmente, um binário que o sistema operacional (SO) carrega na memória e inicia. Todo o resto, desde o gerenciamento de memória até as considerações de segurança, são um fardo do programador.

O código gerenciado é escrito em uma das linguagens de alto nível que podem ser executadas em cima do .NET, como C#, Visual Basic, F# e outros. Quando você compila o código escrito nessas linguagens com o respectivo compilador, não obtém o código do computador. Você obtém o código de Linguagem intermediária que o runtime compila e executa. O C++ é a única exceção a essa regra, pois também pode produzir binários nativos não gerenciados que são executados no Windows.

Linguagem intermediária e execução

O que é "Linguagem Intermediária" (ou IL para abreviar)? É um produto da compilação de código escrito em linguagens .NET de alto nível. Depois de compilar seu código escrito em uma dessas linguagens, você obterá um binário que é feito de IL. É importante observar que o IL é independente de qualquer linguagem específica que seja executada sobre o runtime; há até uma especificação separada para ela que você pode ler se estiver interessado.

Depois de produzir IL a partir do código de alto nível, você provavelmente desejará executá-lo. Aqui, a CLR assume e inicia o processo de compilação Just-In-Time ou colocando em compilação JIT seu código da IL no código do computador, que pode ser executado em uma CPU. Dessa forma, a CLR sabe exatamente o que o código está fazendo e pode, efetivamente, gerenciá-lo.

Às vezes, a Linguagem Intermediária também é chamada de CIL (Common Intermediate Language).

Interoperabilidade de código não gerenciado

Claro, o CLR permite passar os limites entre o mundo gerenciado e não gerenciado, e há um monte de código que faz isso, mesmo nas bibliotecas de classes do .NET . Isso é chamado de interoperabilidade ou apenas interop. Estas disposições permitiriam, por exemplo, encapsular uma biblioteca não gerenciada e fazer chamadas a ela. No entanto, é importante observar que, quando você faz isso, quando o código passa os limites do runtime, o gerenciamento real da execução está novamente na mão do código não gerenciado e, portanto, se enquadra nas mesmas restrições.

Semelhante a isso, O C# é uma linguagem que permite que você use constructos não gerenciados, como ponteiros diretamente no código, utilizando o que é conhecido como de contexto não seguro, que designa um código para o qual a execução não é gerenciada pelo CLR.

Mais recursos