The CLR loads the (platform indipendent) MSIL that was produced by a .NET compiler and, as a second compilation step, turns it into (platform dependent) native code. (This second step is referred to Just in Time (JIT) compilation).
Verification process
In order to run managed code, it must undergo a verification process. (It is possible, however, for the administrator to grant a permission to skip this process).
This verification process checks if the code being verified does not try to access invalid memory addresses or perform other potentially dangerous actions.
If the managed code passes the verification, it is said to be type-safe.
Tha advantage of type-safe code is that the
Common Language Runtime is able to provide better isolation by not sacrificing performance.