Ler em inglês

Partilhar via


O que é "código gerenciado"?

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

Para simplificar, código gerenciado é exatamente isso: código cuja execução é gerenciada por um tempo de execução. Nesse caso, o tempo de execução 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 pegar o código gerenciado, compilá-lo em código de máquina e, em seguida, executá-lo. Além disso, o tempo de execução fornece vários serviços importantes, como gerenciamento automático de memória, limites de segurança e segurança de tipo.

Compare 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 a gestão da memória até às considerações de segurança, é um fardo para o programador.

O código gerenciado é escrito em uma das linguagens de alto nível que podem ser executadas sobre o .NET, como C#, Visual Basic, F# e outras. Quando você compila código escrito nessas linguagens com seu respetivo compilador, você não obtém código de máquina. Você obtém o código da linguagem intermediária que o tempo de execução compila e executa. 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 é "Intermediate Language" (ou IL)? É um produto de 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 notar que o IL é independente de qualquer linguagem específica que seja executada em cima do tempo de execução; Há até mesmo uma especificação separada para ele que você pode ler se estiver tão inclinado.

Depois de produzir IL a partir do seu código de alto nível, você provavelmente desejará executá-lo. É aqui que o CLR assume e inicia o processo de compilação Just-In-Time , ou JIT-ing seu código de IL para código de máquina que pode realmente ser executado em uma CPU. Dessa forma, o CLR sabe exatamente o que seu código está fazendo e pode gerenciá-lo de forma eficaz.

A Linguagem Intermediária às vezes também é chamada de Linguagem Intermediária Comum (CIL) ou Linguagem Intermediária Comum (CIL).

Interoperabilidade de código não gerenciado

É claro que o CLR permite passar os limites entre o mundo gerenciado e o mundo não gerenciado, e há muito código que faz isso, mesmo nas bibliotecas de classes .NET. Isso é chamado de interoperabilidade, ou interoperabilidade para abreviar. Essas disposições permitiriam, por exemplo, embrulhar uma biblioteca não gerenciada e chamá-la. No entanto, é importante notar que, uma vez que você faz isso, quando o código passa os limites do tempo de execução, o gerenciamento real da execução está novamente na mão do código não gerenciado e, portanto, cai sob as mesmas restrições.

Semelhante a isso, C# é uma linguagem que permite que você use construções não gerenciadas, como ponteiros, diretamente no código, utilizando o que é conhecido como contexto inseguro, que designa um pedaço de código para o qual a execução não é gerenciada pelo CLR.

Mais recursos