05 2012 档案
摘要:要了解计算机程序如何执行的,我们需要了解一个典型系统的硬件组成。如下图: 总线 贯穿整个系统的是一组电子管道,称作总线。它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字。字中的字节数是一个基本的系统参数,个个系统中也一样。有的系统是4个字节的字长,有8个字节的字长,也有的小系统是用的1个字节或者2个字节的字长。 I/O设备 I/O设备是系统与外界的联系通道。包括用户输入的例如键盘和鼠标,输出的例如显示器、打印机、投影仪。以及用于长期存储数据和程序的磁盘。 每个I/O设备都是通过一个控制器或适配器与I/O总线连接起来。控制器和适配器之间的区别...
阅读全文
摘要:类型,对象,线程栈和托管堆在运行时的相互关系(一)中说到类型,对象,线程栈和托管堆在运行时的相互关系。下面围绕CLR再来讨论这个问题。定义如下两个类。internal class Employee {public public Int32 GetYearsEmployed() { ... }public virtual String GenProgressReport() { ... }public static Employee Lookup(String name) { ... }}internal sealed class Manager : Employee {public overr
阅读全文
摘要:一直在园子里都是瞻仰各位大牛,没有留下过一点痕迹。借用糗百中的一句话“光看不发掉人品啊”。从劳动节到现在菜鸟我一直跟智齿作斗争。来上面攒点人品,顺便培养写东西这种文艺修养。哈哈哈哈。。。垃圾是怎么产生的呢? 首先要明确一个问题,什么事垃圾呢?个人窃以为就是:不再被需求的资源。之所以这么说,是觉得这个“垃圾资源”当初也是为某个程序立下汗马功劳的,在后面也会讲到他自己不能决定自己的命运,人家需要就创建他,不需要就摧毁它。 在面向对象的环境中,每个类型都代表一种供程序使用的资源。比如文件、内存、网络、DB。这些资源也是经过一个或短或长的人生之后沦落为“废物”的。 资源的产生:调用IL指令ne...
阅读全文
摘要:当系统加载一个CLR的进程,进程里面可能有多个线程,这时候系统会给这个进程创建一个大小为1M的线程栈。这个线程栈用来存放方法调用的实参,和方法内部定义的局部变量。下图展示了一个线程栈的栈内存。线程栈的存储是从高位内存地址向地位内存地址构建的。现在假设线程栈执行的代码要调用M1方法。在这个很简单的方法中,应该包含一些初始化这个方法的“序幕”代码,和一些“尾声”代码,负责在方法调用完成之后对方法进行清理。然后才返回给这个方法的调用者。M1方法调用开始时,M1的序幕代码在线程栈上分配局部变量name的内存。如下图然后M1调用M2方法,将name作为一个实参来传递。这造成name局部变量中的地址...
阅读全文