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