.NET运行时CLR(C/C++编写)编译为clr.dll的方式及相关疑问
关于CLR与clr.dll的常见疑问
1. clr.dll是否包含垃圾回收器等所有.NET运行时组件?
在早期.NET Framework环境中,clr.dll是核心CLR(公共语言运行时)的承载DLL,它确实包含了核心运行时组件,比如垃圾回收器(GC)、JIT编译器、类型系统与元数据处理模块等。不过并非所有.NET运行时相关功能都打包在这一个文件里,部分辅助性或扩展性功能会拆分到其他配套的原生DLL中,但核心的垃圾回收器组件是包含在clr.dll内的。
2. CLR由C/C编写,为何能以DLL形式存在?DLL是否可包含C/C代码?
首先要明确:DLL只是一种动态链接库的文件格式,它并不限制内部代码的类型。
- 我们日常接触到的包含IL代码的DLL是.NET托管程序集,这类DLL由C#等.NET语言编译生成,属于托管代码,需要CLR来解释或编译执行;
- 而
clr.dll是用C/C编译生成的原生DLL,内部的代码是直接可以被操作系统执行的机器码,和普通Windows平台下C/C编写的原生DLL没有本质区别。
所以CLR以DLL形式存在完全合理,DLL本身既可以承载托管IL代码,也可以承载原生C/C++编译出的机器码,只是两种不同类型的DLL,后缀名相同而已。
内容的提问来源于stack exchange,提问作者user22155685
相关产品推荐
相关产品推荐

