Às vezes, ouço sobre isso quando falo sobre .NET, por exemplo, "código gerenciado" e "código não gerenciado", mas não tenho idéia do que são e quais são suas diferenças. Quais são as diferenças deles, por definição? Quais são as conseqüências do uso de um deles? Essa distinção existe apenas no .NET / Windows?
138
Respostas:
Código gerenciado
Código gerenciado é o que os compiladores do Visual Basic .NET e C # criam. É executado no CLR (Common Language Runtime), que, entre outras coisas, oferece serviços como coleta de lixo, verificação de tipo em tempo de execução e verificação de referência. Portanto, pense nisso como "Meu código é gerenciado pelo CLR".
Visual Basic e C # só podem produzir código gerenciado; portanto, se você estiver escrevendo um aplicativo em um desses idiomas, está criando um aplicativo gerenciado pelo CLR. Se você estiver escrevendo um aplicativo no Visual C ++ .NET, poderá produzir código gerenciado, se quiser, mas é opcional.
Código não gerenciado
O código não gerenciado é compilado diretamente no código da máquina. Portanto, por essa definição, todo código compilado pelos compiladores C / C ++ tradicionais é 'código não gerenciado'. Além disso, como é compilado para código de máquina e não para um idioma intermediário, ele não é portátil.
Sem gerenciamento de memória livre ou qualquer outra coisa que o CLR fornece.
Como você não pode criar código não gerenciado com o Visual Basic ou C #, no Visual Studio todo o código não gerenciado é gravado em C / C ++.
Misturando os dois
Como o Visual C ++ pode ser compilado em código gerenciado ou não gerenciado, é possível misturar os dois no mesmo aplicativo. Isso obscurece a linha entre os dois e complica a definição, mas vale a pena mencionar apenas para que você saiba que ainda pode haver vazamentos de memória se, por exemplo, você estiver usando uma biblioteca de terceiros com algum código não gerenciado mal escrito.
Aqui está um exemplo que eu encontrei pesquisando no Google :
fonte
Isso é mais geral que o .NET e Windows. Gerenciado é um ambiente em que você tem gerenciamento automático de memória, coleta de lixo, segurança de tipos, ... não gerenciado é tudo o mais. Por exemplo, o .NET é um ambiente gerenciado e o C / C ++ não é gerenciado.
fonte
Código gerenciado é uma diferenciação criada pela Microsoft para identificar o código do programa de computador que requer e só será executado sob o "gerenciamento" de uma máquina virtual do Common Language Runtime (resultando em 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
fonte