Machines cannot run MSIL directly. JIT compiler turns MSIL into native code, which is CPU specific code that runs on the same computer
architecture as the JIT compiler. Because the common. Language runtime
supplies a JIT compiler for each supported CPU architecture, developers
can write a set of MSIL that can be JIT-compiled and run on computers
with different architectures.
However, your managed code will run only on a specific operating system if it calls platform specific native APIs, or a platform-specific class library.
JIT compilation takes into account the fact that some code might never get called during execution. Rather than using time and memory
to convert all the MSIL in a portable executable (PE) file to native
code, it converts the MSIL as needed during execution and stores the
resulting native code so that it is accessible for subsequent calls.
The
loader creates and attaches a stub to each of a type's methods when the
type is loaded. On the initial call to the method, the stub passes
control to the JIT compiler, which converts the MSIL for that method
into native code and modifies the stub to direct execution· to the
location of the native code. Subsequent calls of the JIT -compiled
method proceed directly to the native code that was previously
generated, reducing the time it takes to JIT-compile and run the code.
Managed and Unmanaged Code
Managed
code is code that is written to target the services of the common
language runtime. In order· to target these services, the code must
provide a minimum level of information (metadata) to the runtime. All
C#, Visual Basic .NET, and JScript .NET code is managed by default.
Visual Studio .NET C++ code is not managed by default, but the compiler
can produce managed code by specifying a command-line switch (/CLR).
0 comments:
Post a Comment