.net中的托管、非托管

1、托管代码Managed Code

托管代码是编译器创建,被编译成中间语言(IL),IL被保存在程序集(描述代码的类、方法它和属性的元数据文件)中。

托管代码运行在CLR中;

托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;

托管类型是可以被垃圾回收器所回收的。他们必须要用关键字new来创建;

.Net程序被加载入内存以后,当某段IL代码被第一次运行的时候,JIT编译器就会将这段IL代码,全部编译成本地代码,然后再执行。

2、非托管代码Unmanaged Code

非托管代码依赖与平台和语言,需要自己提供安全检测、垃圾回收等操作;


.net程序在进行内存中分配出堆栈(Stack)、托管堆、非托管堆。

1、堆栈上

  • 分配的是所有的值类型对象、引用类型对象的引用
  • 根据对象的生存周期来依次分配和释放
  • 在.net中,始终存储了一个特殊的指针指向堆栈的尾部,这样一个堆栈内存的分配就直接从这个指针指向的内存位置开始向下分配,效率很高

2、托管堆

  • 分配的是.net所有的引用类型对象
  • 托管堆连续分配内存
  • 受.net的垃圾收集机制管理,效率比堆栈低得多

3、非托管堆

  • 非托管资源被分配到非托管堆上;
  • 非托管的堆需要程序员手动分配、手动释放;
  • 不受.net的垃圾回收和内存管理制度管理;


参考:.NET 垃圾回收 | Microsoft Docs

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值