czwartek, 5 czerwca 2014

Managed code vs unmanaged code

Słyszeliście czasami jak sobie dwóch kolegów programistów gada o kodzie zarządzanym/niezarządzanym, że w jednym to tak to działa a w drugim tak, że tutaj to a tutaj tamto, a wy nie bardzo wiedzieliście o co chodzi? No niby znacie .NET framework, prawda? Z racji serii wpisów traktujących o podstawach .NET framework, t tym poście postaram się przedstawić różnicę między kodem zarządzanym (managed code) a niezarządzanym (unmanaged code) w .NET Framework. A post będzie krótki bo i też w zasadzie nie ma o czym gadać a temat prosty i przyjemny. 

Gdy piszemy aplikację, kompilujemy ją i uruchamiamy, niezależnie od tego czy jest to aplikacja desktopowa, aplikacja internetowa czy jeszcze co tam sobie wymyślimy, zawsze działa ona pod kontrolą CLR (Common Language Runtime) o którym pisałem w poprzednim poście. Jest to mechanizm, który kontroluje naszą aplikację, zarządza garbage collectorem, sprawdza czy kod jest bezpieczny i możliwy do uruchomienia, itd. Zasada jest prosta: każdy kod, którą działa pod kontrolą CLR jest nazywany kodem zarządzanym "managed code". Jeśli piszemy jakikolwiek kod w C# lub VB.NET to zawsze będzie to "managed code", innymi słowy będzie to zawsze kod zarządzany przez CLR. 
Unmanaged code jest z kolei kompilowany bezpośrednio do kodu maszynowego. W .NET Framework kod niezarządzany można tworzyć jedynie przy użyciu Visual C++ (oczywiście można również kompilować do kodu zarządzanego, jeśli chcemy np. aby garbage collector załatwiał za nas sprawy związane z czyszczeniem pamięci po nieużywanych obiektach, czy do weryfikacji kodu). Pomyślmy sobie o aplikacji skype jako o przykładzie "unmanage code" (napisany w C/C++). Skype możemy oczywiście uruchomić z poziomu kodu zarządzanego, np. naszej aplikacji napisanej w WinForms, jednak CLR nie ma żadnej kontroli nad kodem niezarządzanym, a co za tym idzie nie ma żadnej kontroli nad naszą aplikacją Skype. Wyobraźmy sobie teraz, że uruchomiliśmy skype z naszej aplikacji, która po chwili łapie jakiś nieobsłużony wyjątek i się wywala - zostanie ona zamknięta czy zrestartowana czy po prostu wywali się z jakiegoś innego powodu. A co z naszym Skypem? - zostanie nadal uruchomiony, bo CLR nie ma nad nim żadnej kontroli. 

Brak komentarzy:

Prześlij komentarz