Managed en umanaged code: belangrijkste verschillen
Dit is een vervolg op onze vorige blog over onveilige code. In deze blog zullen we de belangrijkste verschillen tussen Managed en Unmanaged code in C# uitleggen. Unmanaged code is niets anders dan onveilige code.
Als je het kan herinneren, wordt in C# een code doorgaans uitgevoerd onder controle van de Common Language Runtime (CLR) van de .NET-frameworks. CLR helpt bij het uitvoeren van de code en biedt ook een verscheidenheid aan services om het ontwikkelingsproces eenvoudig te maken. Alle codes die worden beheerd door de CLR worden de Managed Code genoemd, terwijl de delen van het programma die zijn geschreven met het onveilige sleutelwoord Unmanaged Code worden genoemd. Deze vallen buiten de controle van CLR van de .NET-frameworks.
Inhoudsopgave
- Wat is managed code in C#?
- Uitvoering van managed code
- Voordelen van managed code
- Nadelen van managed code
- Wat is unmanaged code in C#?
- Uitvoering van unmanaged code
- Voordelen van unmanaged code
- Nadelen van unmanaged code
- Verschil tussen managed en unmanaged code
- Conclusie
Wat is managed code in C#?
Zoals we in het begin hebben gezien, staat de code die is ontwikkeld met behulp van de Common Language Runtime (CLR) van het .NET-framework bekend als Managed Code. Met andere woorden, het is de code die direct in C# wordt uitgevoerd. De runtime-omgeving voor managed code biedt een verscheidenheid aan services aan de programmeur. De geleverde diensten zijn exception handling, garbage collection, type check, etc. De bovengenoemde diensten worden automatisch aan de programmeur geleverd. Afgezien van de bovengenoemde services biedt de runtime-omgeving ook geheugentoewijzing, objectverwijdering, objectcreatie, enz.
Uitvoering van de managed code
De managed code wordt altijd door de CLR gecompileerd in een tussentaal die bekend staat als MSIL en daarna wordt het uitvoerbare bestand van de code gemaakt. De tussentaal (MSIL) in de broncode wordt gecompileerd door de compiler met de naam 'Just In Time Compiler' wanneer het uitvoerbare bestand wordt uitgevoerd door de programmeur. Hier wordt het hele proces uitgevoerd onder een runtime omgeving, vandaar dat de runtime omgeving de reden is achter de werking van het programma.
Voordelen van managed code
- De beveiliging van de code is verbeterd omdat we een runtime-omgeving gebruiken die bescherming biedt tegen bufferoverloop door geheugenbuffers te controleren.
- Opruimen van oude objecten (Garbage Collection) wordt automatisch geïmplementeerd.
- Dynamische typecontrole of runtime-typecontrole is ook beschikbaar.
- De runtime-omgeving doet ook de referentiecontrole. Het controleert of het referentiepunt van het object geldig is of niet en controleert ook of het dubbele object aanwezig is of niet.
Nadelen van managed code
- Geheugen kan niet direct worden toegewezen.
- In managed code kan geen toegang op laag niveau tot de CPU-architectuur worden verkregen.
Wat is unmanaged code in C#?
De unmanaged code wordt ook wel onveilige code genoemd. Unmanaged code is afhankelijk van de computerarchitectuur zoals deze bedoeld is voor de processorarchitectuur. In C# worden de activiteiten zoals het beheren van stacks, toewijzing en vrijgave van geheugen, enz. verzorgd door de CLR en daarom vallen deze activiteiten buiten het bereik van de programmeur. De programmeur vertelt de compiler dat het beheer van de code door hem/haar zal worden gedaan wanneer hij/zij het keyword “unsafe” gebruikt. Problemen zoals geheugenlekken kunnen echter optreden als een programmeur slechte code schrijft.
Uitvoering van unmanaged code
Voor het uitvoeren van unmanaged code worden wrapper-classes gebruikt in C#. In C# wordt de unmanaged code direct uitgevoerd door het besturingssysteem. Over het algemeen zijn de uitvoerbare bestanden met unmanaged of onveilige code in de vorm van binaire afbeeldingen die in het geheugen worden geladen. De stappen voor het uitvoeren van de code zijn te zien in de bovenstaande afbeelding.
Voordelen van unmanaged code
- Onveilige code verhoogt de stabiliteit en de prestaties van het programma.
- Er is toegang op laag niveau tot de programmeur.
- Onveilige code biedt een medium om te communiceren met het geheugen.
Nadelen van unmanaged code
- Er wordt geen beveiliging geboden aan de applicatie.
- De programmeur moet uitzonderingen afhandelen.
- Geen automatische implementatie van garbagecollection.
- Het gebruik van onveilige code kan leiden tot fouten, die kunnen optreden als typecontrole wordt omzeild.
Verschil tussen managed en unmanaged code?
- managed code is degene die wordt uitgevoerd door de CLR van het .NET-framework, terwijl unmanaged of onveilige code wordt uitgevoerd door het besturingssysteem.
- managed code is degene die wordt uitgevoerd door de CLR van het .NET-framework, terwijl unmanaged of onveilige code wordt uitgevoerd door het besturingssysteem.
- De managed code biedt beveiliging aan de code, terwijl unmanaged code beveiligingsrisico's creëert.
- In onveilige of unmanaged code wordt de unsafe-modifier gebruikt om het codeblok te schrijven. Terwijl elke andere code die buiten het unsafe- codeblok wordt geschreven, een managed code is.
- Problemen met geheugenbufferoverloop treden niet op in managed code, aangezien dit wordt opgelost door de runtime-omgeving. Deze problemen doen zich voor in unmanaged code.
- Runtime-services worden geleverd in managed code, terwijl ze niet worden geleverd in unmanaged code.
- De broncode wordt eerst geconverteerd naar tussentaal en vervolgens naar moedertaal in managed code, terwijl het direct wordt omgezet in de moedertaal in unmanaged code.
- unmanaged code biedt toegang op laag niveau, terwijl managed code dat niet biedt.
- In onveilige of unmanaged code wordt de unsafe-modifier gebruikt om het codeblok te schrijven, terwijl elke andere code die buiten het unsage-codeblok wordt geschreven, managed code is.
Conclusie
Dit artikel geeft je inzicht in managed en unmanaged code in C#. De uitvoering van elk type code is gedemonstreerd in het artikel dat jou helpt bij het begrijpen van het juiste gebruik van die codes bij het ontwikkelen van elk soort applicatie.