当前位置: 首页 > news >正文

托管和非托管

托管和非托管主要是指内存管理和资源控制方式的不同,

托管环境中,内存管理和资源控制由运行时环境自动处理。比如.NET的CLR,和Java的JVM。开发者不需要手动管理内存的分配和释放,这些任务由托管环境负责。

特点:

1.自动内容管理:C#依赖垃圾回收机制(GC),自动处理对象的创建,管理和释放,避免内存泄露

非托管环境中,内存管理完全由开发者手动控制,开发者需要精确的分配和释放内存。如C和C++。但会拥有更高的性能和控制。

特性托管(Managed)非托管(Unmanaged)
内存管理自动(垃圾回收)手动(malloc/free)
安全性高,自动防护低,开发者负责
性能较低,但可以优化高,直接控制硬件
易用性较易,适合高层开发较难,适合底层开发
跨平台好(依赖运行时)差,需特定调整

CLR的作用:

  • 加载和执行代码。
  • 提供类型安全检查。
  • 管理内存分配。
  • 执行安全策略。
  • 支持跨语言互操作性。

GC的作用

  • GC 是 CLR 的一部分,专门负责 自动内存管理。它通过垃圾回收机制,自动回收那些不再使用的对象占用的内存,从而防止内存泄漏和优化内存使用。
  • 工作原理
    • 内存分配:GC 负责为程序中的对象分配内存。
    • 垃圾回收:GC 定期检查堆中不再被引用的对象,并释放它们占用的内存。这个过程通常是自动进行的,无需开发者手动释放内存。
  • GC 是 CLR 的子系统:GC 在 CLR 的控制下工作,负责管理托管堆中的对象生命周期。

简单来说,CLR 是一个更大的运行时环境,管理整个 .NET 应用的执行,而 GC 是 CLR 内部专门用于内存管理的模块。-


http://www.mrgr.cn/news/24357.html

相关文章:

  • OpenCV结构分析与形状描述符(19)查找二维点集的最小面积外接旋转矩形函数minAreaRect()的使用
  • 北京链家星河湾店·鸿鹄向阳杯羽毛球赛成功举办
  • 【HarmonyOS】必修技能
  • KEIL编译生成.bin文件的简单方法
  • 图神经网络模型介绍2
  • VueX是什么
  • 在原keil上/在别人电脑上能跑,在自己的keil上不能跑是什么原因?
  • C++模板-进阶篇
  • SprinBoot+Vue宠物寄养系统的设计与实现
  • uniapp中使用uni.$emit和uni.$on在vue和nvue页面之间传值但是无法赋值的问题
  • 面试官:说说你对keep-alive的理解是什么?
  • Python设计模式实战:开启软件设计的精进之旅
  • Windows安装docker
  • LLM大模型基础入门:从头开始编写LLM代码
  • 责任划分不清导致工作冲突,项目困局如何解?
  • 瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法
  • 【高并发设计】系统三高是哪三高,高并发,到底QPS达到多少才算高并发,多大的并发才算是高并发,今天我们来简单聊聊
  • UEFI基础概念2——Handle和Protocol
  • 实战千问2大模型第二天——Qwen2-VL-7B(多模态)的部署和测试
  • uniapp业务实现