【CLR的执行模型:将源代码编译成托管模块】
CLR:由多种不同编程语言使用的运行库
托管模块:中间语言和元数据
非托管语言:C/C++,不过此为特殊,可以写成托管代码
托管语言:C#
托管模块
1,PE32/PE32+头:PE32运行在win32位系统中,win32+运行在64位系统
2,CLR头,包括CLR版本,方法入口main,元数据标记,元数据,资源,名称
3,IL代码:CLR将IL编译成本地cpu指令
图:
总结:在net的CLR(公共语言运行库)中包括托管语言(C#)和非托管语言(例如C++),两者到底什么区别.下面以数组为例
C#初始化数组不必考虑内存分配问题,如果你用反汇编工具可以看到IL代码,会自动分配内存大小
C++则与此不同,你需要事前分配合适大小再去处理
其次,CLR到底干嘛的?比如异常处理程序,你可以用C/c++/VB/C#/F#等不同语言编程,但是最终都要通过相应的编译器编译成IL(中间语言),然后调用底层异常处理程序。其为公用的一类程序仓库。整个源代码编译成托管模块的过程是,源代码(C#)在完成后,运行时经过相应的(C#)编译器编译成中间语言,生成相应托管模块(中间语言和元数据)的 整个过程
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架