It works just like unmanaged code. The CLR, JIT compiler, and .NET Framework assemblies are DLLs that are shared by any process that manages managed code. Only one copy of their code is loaded into RAM, all processes map their virtual memory pages to one copy.
Managed code has more private bytes than unmanaged code that cannot be shared. First of all, due to the JIT compiler, it generates machine code on the fly at addresses that will not be the same for one process and another. Both the loader and the garbage collector are usually a bit meaty.
JIT Ngen.exe. .NET Framework , Ngen-ed, . , .