前言,之前有说过C语言的函数&变量的一些基本概念,说得可能不是很好,先也把C#的、里相关的也说下,已成一统。

而说函数变量,其实主要就是GC,而GC又是CLR的主要内容,故就有了此文。

 

CLR基本原理:

把这几个概念一说基本就知道了,其实就是为了跨语言、跨平台,和JAVA的JVM类似

(有在一优化性能书看过jvm各种底层详解,不过那种优化级别..思想很不错,但看看了解就好了)

1.MSIL,中间语言,就是独立于所在平台系统的.net的特殊代码。里面含有相关元数据信息,常用的反编译工具想ILspy等就是靠他吃饭的。

2.CLR,公共语言运行时,其实就是把VB、VC、C#等不同语言编译成同一的中间语言

3.JIT,即使运行时,其实就是个翻译器,把IL翻译成对应系统的二进制代码并运行之

 

当然还有一些什么加载dll*exe等文件时的行为控制及解析里面(对象等)关系,验证程序集版本等等就没必要说了,谈不上主要原理

 

CLR内存管理:

1.堆栈,这个和C语言说的基本相同,

一般变量值存在栈中,用变量(栈指针)指向,程序调用过程就是入栈出栈过程,调用完即出完栈就没了;

而自定义类型数据一般存储堆(也叫托管堆)中,用变量(对象地址)指向,调用完可能还在内存,等待GC定时回收;

2.GC垃圾回收

垃圾回收方式,一般常用有标志清楚(即CLR用的)和引用计数器(OC用的就是)两个方式。

其实就是先循环查找标志不被引用的垃圾,再循环清楚,这个比较耗些资源,故oc用不起(oc计数又麻烦就有了ARC,这个OC另说)。

但GC回收不一定是实时的,好像有几个实用时间最短、最久没用等的算法什么的策略

3.非托管资源

不在CLR自动控制范围内的资源需要我们写代码手动释放,常见的想文件、网络、数据库等操作资源都是。

释放方式一般有两种:A,实现虚方法,B实现dispose方法(也就是using)

 

好了,写了快一个小时了,应该有吧?就这样吧。

上面就是我所知道最简单的CLR原理和一些(GC)概念理解,深入我也不清楚,只能查资料了。。。

 

PS,明天还是迟些时间把mysql架构优化或是常用架构写下,真怕工作中用不到久了就都忘了,不过不属基础、应该是加密的了,呵呵~

 

posted on 2015-10-31 13:36  记忆  阅读(1339)  评论(0编辑  收藏  举报
有我在,可保你IT无忧!