Słyszę / czytam o tym czasami, gdy mówię o .NET, na przykład „kod zarządzany” i „kod niezarządzany”, ale nie mam pojęcia, czym one są i jakie są między nimi różnice. Jaka jest ich różnica z definicji? Jakie są konsekwencje korzystania z któregokolwiek z nich? Czy to rozróżnienie istnieje tylko w .NET / Windows?
138
Odpowiedzi:
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 :
źródło
Jest to bardziej ogólne niż .NET i Windows. Zarządzane to środowisko, w którym masz automatyczne zarządzanie pamięcią, wyrzucanie elementów bezużytecznych, bezpieczeństwo typów ... wszystko inne jest niezarządzane. Na przykład .NET jest środowiskiem zarządzanym, a C / C ++ jest niezarządzane.
źródło
Kod zarządzany to zróżnicowanie opracowane przez firmę Microsoft w celu zidentyfikowania kodu programu komputerowego, który wymaga i będzie wykonywany tylko w ramach „zarządzania” maszyną wirtualną Common Language Runtime (w wyniku czego powstaje kod bajtowy).
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
źródło