C# 高级编程个人笔记搬运 四(托管和非托管资源)

本文是C#高级编程笔记的一部分,重点讨论后台内存管理、强引用和弱引用以及处理非托管资源。文章指出,虽然垃圾回收器处理托管资源,但程序员仍需了解内存管理细节以优化性能。文中解释了栈和堆的工作原理,以及垃圾回收机制,强调了处理非托管资源如文件句柄、网络连接和数据库连接时使用析构函数和实现IDisposable接口的重要性。
摘要由CSDN通过智能技术生成

我最近碰到一个机会去做听起来比较高级的事情,有点兴奋,有点害怕,毕竟那个领域不是我很擅长的,但是我多多少少会点,而且我特别想去触碰那个领域!这种复杂的心情伴了我整整一天一夜,以至于我一回家就心心念念拿起了书本去啃,却一个字都没有啃下去。但无疑我是想握住这机会的,像我这种人注定是走钢丝型的:

曾经在 幽幽 暗暗 反反 复复 中追问

才知道 平平 淡淡 从从 容容 才是真

再回首 恍然如梦

再回首 我心依旧

只有那 无尽的长路 伴着我

 我还是抓紧时间把这本书的笔记写完,今天很巧要搬运的笔记是关于托管和非托管资源这块的内容,搞c#的经常会听到前辈说这些个词o(* ̄︶ ̄*)o,但很多年轻的程序员压根不重视偏底层的原理!这是非常不对的,你不重视就不知道自己写的好不好、对不对。所以这里我写的尽可能详细点,把我的所思所想都写出来,也当给自己敲个警钟。

后台内存管理

在c#中你会经常听到资源两个子,无论你是在做WPF的时候,还是在做其它的时候。在这里讲的资源就是指——存储在托管或本机堆中的对象。尽管垃圾收集器释放存储在托管堆中的托管对象,但不释放本机堆中的对象。使用托管环境时,很容易注意不到内存管理,因为你认为垃圾回收器(GC)会处理它。所以我们需要一步步去了解内存管理和内存访问的各个方面,才能更加高效地处理内存。

windows使用虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由windows在后台管理。对于32位的操作系统一般情况下(不管你的物理内存多大)使用的内存为4GB,这里面放执行的代码、代码加载的所有DLL,已经运行中使用的所有变量的内容。而这4GB的内存就称为虚拟地址空间,或虚拟内存。(以下的内存都是虚拟内存,堆都是托管堆)

我稍微做个补充解释,在我们学习《计算机操作系统原理》的时候,或多或少会记得老师讲过的分页存储、分段存储这两个策略行为。在以前我们需要多个运行多个进程的时候,往往都会把他们都放在内存中。后来有了虚拟存储技术,就是你不需要将进程的全部都放在内存之中。有一篇文章介绍挺好的http://c.biancheng.net/view/1270.html。等到时候我把这文章更新,画个图解释一下一定能懂。

回过头,这4GB每个单元都是从0开始往上走的,你需要访问虚拟内存中的某个空间的一个值时,你就需要提供表示该存储单元的数字,你可以理解为变量名其实就是一个内存地址。在这虚拟内存中有堆、栈。栈存储的是非对象成员的值类型,还有你在调用方法时,由栈去传递所有方法的参数副本,就是说参数是复制的不是源的栈是弹压式逻辑,是后进先出,如

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值