Kod zarządzany
Kod zarządzany jest tym, co kompilatory Visual Basic .NET i C # tworzą. Działa w środowisku CLR (Common Language Runtime), który między innymi oferuje usługi takie jak wyrzucanie elementów bezużytecznych, sprawdzanie typów w czasie wykonywania i sprawdzanie referencji. Pomyśl o tym jako o „Moim kodzie zarządza CLR”.
Visual Basic i C # mogą tworzyć tylko kod zarządzany, więc jeśli piszesz aplikację w jednym z tych języków, piszesz aplikację zarządzaną przez środowisko CLR. Jeśli piszesz aplikację w języku Visual C ++ .NET, możesz utworzyć kod zarządzany, jeśli chcesz, ale jest to opcjonalne.
Kod niezarządzany
Kod niezarządzany kompiluje się bezpośrednio do kodu maszynowego. Zatem zgodnie z tą definicją cały kod skompilowany przez tradycyjne kompilatory C / C ++ jest „kodem niezarządzanym”. Ponadto, ponieważ kompiluje się do kodu maszynowego, a nie do języka pośredniego, nie jest przenośny.
Żadnego wolnego zarządzania pamięcią ani niczego innego, co zapewnia CLR.
Ponieważ nie można tworzyć niezarządzanego kodu w języku Visual Basic lub C #, w programie Visual Studio cały niezarządzany kod jest napisany w języku C / C ++.
Mieszanie dwóch
Ponieważ Visual C ++ można skompilować do kodu zarządzanego lub niezarządzanego, możliwe jest połączenie tych dwóch elementów w tej samej aplikacji. To zaciera granicę między nimi i komplikuje definicję, ale warto o tym wspomnieć, aby wiedzieć, że nadal możesz mieć wycieki pamięci, jeśli na przykład używasz biblioteki innej firmy z jakimś źle napisanym niezarządzanym kodem.
Oto przykład znalazłem przez googlowania :
#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;
}