web-dev-qa-db-fra.com

Différence entre le code natif et le code managé?

Par exemple, lorsque vous consultez le site Web du profileur GlowCode, il est indiqué:

"GlowCode 6.2 et profil x64 natif, géré et mixte C++, C #, code .NET"

Que signifient-ils?

53
Joel

Le code natif est le code dont la mémoire n'est pas "gérée", car dans, la mémoire n'est pas libérée pour vous (suppression de C++ et libre de C, par exemple), pas de comptage de référence, pas de collecte de déchets. Le code managé, vous l'aurez deviné, est le code dont la mémoire est libre et allouée pour vous, garbage collection et autres goodies.

Le code mixte correspond à un code géré qui appelle une couche non gérée. Normalement, lorsque vous disposez d'un C++ pur non géré DLL et que vous l'appelez à partir de .NET à l'aide de P/invoke.

74
Anzurio

Le code natif est compilé pour fonctionner directement avec le système d'exploitation. Le code managé est cependant précompilé (bytecode en langage Java) mais est ensuite traité par le compilateur Just In Time en code natif lors de l'exécution. Le code managé a l'effet secondaire intéressant d'avoir le potentiel de s'exécuter sur différents systèmes d'exploitation, car le code machine n'est pas créé avant que le VM l'utilise réellement. De cette façon, vous pouvez exécuter. Les applications NET sur Windows et également les exécuter sur Linux ou Mac qui ont le runtime Mono installé. La portabilité n'est pas aussi propre actuellement que Java est (en raison de l'architecture naturellement fermée de Microsoft), mais le concept restes.

Si vous exécutez une application non gérée, le code a été compilé pour s'exécuter pour le système d'exploitation/matériel désigné. Toute portabilité vers un autre système d'exploitation/jeu d'instructions est perdue et doit être recompilée pour s'exécuter.

44
Wayne Hartman

Le code natif est écrit dans le langage machine "natif" de l'ordinateur sur lequel il s'exécute et est exécuté directement par le processeur.

Le code managé est écrit dans un langage spécial qui nécessite un autre programme pour l'exécuter (c'est-à-dire le gérer). Cet autre programme est souvent appelé interprète car il interprète la langue spéciale.

Les programmes C et C++ sont natifs.

Java et C # (et tous les langages .NET d'ailleurs) sont gérés.

Managed C++ est une forme spéciale de C++ qui s'exécute dans l'interpréteur .NET.

Un programme mixte est un programme qui utilise du code à la fois natif et géré.

29
onedozenbagels

Le code exécuté sous le contrôle du Common Language Runtime (CLR) est appelé code managé. Le code qui ne s'exécute pas sous le CLR est appelé code natif.

6
Hanu