137 votes

Différence entre "géré" et "non géré".

J'en entends/lis parfois parler quand on parle de .NET, par exemple "code géré" et "code non géré", mais je n'ai aucune idée de ce qu'ils sont et de leurs différences. Quelles sont leurs différences, par définition ? Quelles sont les conséquences de l'utilisation de l'un ou l'autre de ces termes ? Cette distinction n'existe-t-elle que dans .NET/Windows ?

190voto

kurige Points 1757

Code géré

Le code géré est ce que créent les compilateurs Visual Basic .NET et C#. Il s'exécute sur le CLR (Common Language Runtime), qui offre, entre autres, des services tels que la collecte des déchets, la vérification des types à l'exécution et la vérification des références. Pensez-y donc comme suit : "Mon code est géré par le CLR."

Visual Basic et C# peuvent uniquement produisent du code géré, donc, si vous écrivez une application dans l'un de ces langages, vous écrivez une application gérée par le CLR. Si vous écrivez une application en Visual C++ .NET, vous pouvez produire du code géré si vous le souhaitez, mais c'est facultatif.

Code non géré

Le code non géré se compile directement en code machine. Ainsi, selon cette définition, tout le code compilé par les compilateurs C/C++ traditionnels est du "code non géré". De plus, puisqu'il est compilé en code machine et non en langage intermédiaire, il n'est pas portable.

Pas de gestion libre de la mémoire ou autre chose que le CLR fournit.

Comme vous ne pouvez pas créer de code non géré avec Visual Basic ou C#, dans Visual Studio, tout le code non géré est écrit en C/C++.

Mélange des deux

Comme Visual C++ peut être compilé en code géré ou non géré, il est possible de mélanger les deux dans une même application. Cela brouille la frontière entre les deux et complique la définition, mais cela vaut la peine d'être mentionné pour que vous sachiez que vous pouvez toujours avoir des fuites de mémoire si, par exemple, vous utilisez une bibliothèque tierce avec du code non géré mal écrit.

Voici un exemple que j'ai trouvé en sur le site :

#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;
}

84voto

Darin Dimitrov Points 528142

C'est plus général que .NET et Windows. Un environnement géré est un environnement dans lequel vous disposez d'une gestion automatique de la mémoire, d'un ramasse-miettes, d'une sécurité de type, ... un environnement non géré est tout le reste. Ainsi, par exemple, .NET est un environnement géré et C/C++ est non géré.

13voto

RobertPitt Points 28140

Le code géré est une différenciation inventée par Microsoft pour identifier le code de programme informatique qui nécessite et ne s'exécutera que sous la "gestion" d'une machine virtuelle Common Language Runtime (résultant en Bytecode).

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X