Codice gestito
Il codice gestito è ciò che creano i compilatori di Visual Basic .NET e C #. Funziona sul CLR (Common Language Runtime), che, tra le altre cose, offre servizi come garbage collection, verifica del tipo di runtime e verifica dei riferimenti. Quindi, pensalo come "Il mio codice è gestito dal CLR".
Visual Basic e C # possono produrre solo codice gestito, quindi, se stai scrivendo un'applicazione in una di quelle lingue, stai scrivendo un'applicazione gestita dal CLR. Se stai scrivendo un'applicazione in Visual C ++ .NET puoi produrre codice gestito se vuoi, ma è facoltativo.
Codice non gestito
Il codice non gestito viene compilato direttamente nel codice macchina. Quindi, secondo questa definizione, tutto il codice compilato dai compilatori C / C ++ tradizionali è "codice non gestito". Inoltre, poiché si compila in codice macchina e non in una lingua intermedia, non è portatile.
Nessuna gestione libera della memoria o qualsiasi altra cosa fornita dal CLR.
Poiché non è possibile creare codice non gestito con Visual Basic o C #, in Visual Studio tutto il codice non gestito è scritto in C / C ++.
Mescolando i due
Poiché Visual C ++ può essere compilato in codice gestito o non gestito, è possibile mescolare i due nella stessa applicazione. Ciò confonde la linea tra i due e complica la definizione, ma vale la pena menzionarlo solo perché sai che puoi ancora avere perdite di memoria se, ad esempio, stai usando una libreria di terze parti con un codice non gestito scritto male.
Ecco un esempio che ho trovato su 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;
}