Работает так же, как неуправляемый код. CLR, JIT-компилятор и сборки .NET Framework - это библиотеки DLL, которые совместно используются любым процессом, выполняющим управляемый код. В ОЗУ загружена только одна копия их кода, все процессы сопоставляют свои страницы виртуальной памяти с этой одной копией.
Управляемый код, как правило, имеет больше закрытых байтов, чем неуправляемый код, который нельзя разделить. Это в первую очередь благодаря JIT-компилятору, он генерирует машинный код на лету по адресам, которые не будут одинаковыми для одного процесса по сравнению с другим. И куча загрузчика и мусора, как правило, немного накачана.
Вы устраняете накладные расходы JIT-компилятора с помощью Ngen.exe. Вот почему .NET Framework сборки являются общими, они были Ngen-ed, когда вы установили Framework на машине. С кучей ничего не поделаешь, но в неуправляемом коде это не сильно отличается.