应用程序的运行原理和引用类型的意义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用程序的运行原理和引用类型的意义相关的知识,希望对你有一定的参考价值。
cpu的位数及内存大小:
现在主流的cpu位数为32位和64位,32位cpu表示该cpu的数据总线有32根,一个数据总线可以表示低电频和高电频两种电流(分别用0和1代表),就可以表示2 32次方种数据,也就是4g,cpu每次就可以处理4g数据,所以应用程序的寻址也是4g(内存),对应的最大内存也就是4g,64位也是同理。
交换内存:
在内存中有些数据不是常用数据,就会被系统保存到硬盘上,当再次调用该资源会把其重新加载到内存中,以确保内存的最大效率的使用。
普通应用程序:
普通应用程序无法直接调用cpu等等的硬件资源,只能与操作系统交互,通过操作系统提供的接口来调度硬件资源,操作系统提供一个可执行程序的接口(mian方法),windows系统可运行.net程序和c++等程序,在程序运行时,由windows应用程序加载器读取pe头(相当于一个程序运行标记,标记这个程序是.net程序还是c++程序等等信息,如果是.net则把该程序交给CLR处理),随便用记事本打开一个exe文件:
会发现能运行的程序都有pe头。
为什么要有引用类型:
windows上面的程序大致可以分为两种:操作系统程序和普通应用程序,操作系统一般都由C++/vb等开发,直接交互于硬件资源,而C#等高级语言都是和操作系统交互,操作系统在执行这些程序会一些必要的条件。
如下图:int 类型的num变量声明在using里面
转化为中间语言就会发现所有的变量都是在init方法中,说明了操作系统在执行每个方法之前都要事先计确定该方法需要的内存大小。
在运行程序时每一个方法会被cpu进行处理。方法常常会被称为方法栈,程序编译器必须先计算出该方法栈上的变量总大小。总而言之系统要求方法运行之前要事先确定栈上变量的总大小,方便系统给这个方法分配资源。然而往往程序开发需要一些不能确定大小的变量,例如集合,集合往往会单独开辟一块空间(托管堆),把该空间的地址存在栈上,栈上的地址是确定的,这样就可以满足系统允许程序的要求,从而就诞生了引用类型。
以上是关于应用程序的运行原理和引用类型的意义的主要内容,如果未能解决你的问题,请参考以下文章
Java/Android中的引用类型及WeakReference应用实践