十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
成都创新互联为您提适合企业的网站设计 让您的网站在搜索引擎具有高度排名,让您的网站具备超强的网络竞争力!结合企业自身,进行网站设计及把握,最后结合企业文化和具体宗旨等,才能创作出一份性化解决方案。从网站策划到网站制作、成都网站制作, 我们的网页设计师为您提供的解决方案。小编这次要给大家分享的是c#中托管和非托管资源详解,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
前言
c# 托管和非托管比较重要,因为这涉及到资源的释放。
现在只要在计算机上运行的,无论玩出什么花来,整个什么概念,逃不过输入数据修改数据输出数据(计算机本质),这里面有个数据的输入,那么我们的内存有限啊,这里面就牵扯到数据释放。
看下c# 的垃圾回收是怎么样的。
了解垃圾回收之前首先要了解数据,了解数据需要了解数据类型啊,数据类型分为值类型还有引用类型。
windows 使用一个虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由windows 在后台管理。我们的程序运行在操作系统上,那么我们作为程序员关系的就是这个虚拟寻址系统。
这东西有什么用呢?
比如32位系统中,每个进程所占用的最多4G(4G这样来的,2^32,4个字节),那么这个程序如果进行管理的这4G,它不需要知道在硬件地址是多少。
比如这个进程申请了1k内存,那么这个进程管理的实际是从0到1k的虚拟内存,而不需要知道这个硬件物理内存地址是多少,有一个可以直接证明的就是我们写c++输出指针的时候,发现指针输出1千多,
你觉得可能是物理内存地址的1千多吗?默默的打开资源管理看看现在占用多少内存。
默认情况下,32 位计算机上的每个进程都具有 2 GB 的用户模式虚拟地址空间。这里解释一下,每个进程2个G是虚拟地址,就是在这个进程维护一个2G的虚拟地址,并不是实际占有2G的硬件内存地址。
盗一张图:
虚拟地址有三种状态:
状态 | 描述 |
Free | 该内存块没有引用关系,可用于分配。 |
保留 | 内存块可供你使用,并且不能用于任何其他分配请求。 但是,在该内存块提交之前,你无法将数据存储到其中。 |
已提交 | 内存块已指派给物理存储。 |
那么这个虚拟内存上又分了堆和栈,栈上存储值类型,堆上存储引用类型。
他们的存储方式不一样。
下面是栈:
栈是这样子的先用高位后用低为,比如申请80000,先用的就是80000 直到为0为止。
{ int a=10; double b=100.0; }