C#托管类型和非托管类型
C#代码编译过程:
C#源码 =>
C#编译器转换为公共中间语言(Common Intermediate Language,CIL)=>
CIL代码被公共语言运行库(Common Language Runtime,CLR)转换为机器码(JIT)
1.托管代码
托管代码是在公共语言运行库中运行的代码,托管代码的执行由公共语言运行库来直接控制,而不是操作系统来直接控制。具体而言,由公共语言运行库中的代码管理器来控制和执行托管代码,而公共语言运行库的其他部分会提供托管代码执行时所需要的各种服务,如垃圾回收、类型检查、安全支持等。
2.非托管代码
非托管代码是在托管代码的概念出现后相对于托管代码而言的,其实际上是计算机操纵系统可识别的机器码。非托管代码(机器码)的执行由操作系统来控制,其在执行时也需要各种服务,如垃圾回收、类型检查、安全支持等。由于没有像公共语言运行库这样的东西会自动给你提供服务,所以你需要自己提供这些服务,也就说你要写额外的代码来实现垃圾回收等功能。
托管类型:C#内置类型
非托管类型:
如果某个类型是以下类型之一,则它是非托管类型 :
sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 bool
任何枚举类型
任何指针类型
任何用户定义的 struct 类型,只包含非托管类型的字段,并且在 C# 7.3 及更早版本中,不是构造类型(包含至少一个类型参数的类型)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架