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).
No comments:
Post a Comment