堆的存取是无序的
栈是一种后进先出的数据结构堆栈其实是栈,栈,堆栈英文都是stack托管堆是指.net分配引用类型对象的内存区域;而在.net中的值类型是放在线程栈上的方法中的变量是要确定内存大小:引用类型
2、 对象的创建方式
MyClass m = new MyClass(); -> new创建了对象(newobj) -> 构造方法只是做了初始化 1、首先new向操作系统申请内存2、计算构造方法的继承关系中所有字段的字节数. 3、预算满足"字节数 + 常量 + 8"满足被4正处的最小数4、如果操作系统内存不够了,报异常5、如果内存够了,就返回一个地址6、在托管堆中有一个指针对对象的维护7、 指针对象一般指向一个可用内存,如果申请100字节,那么指针对象会返回当前地址,并下移100字节 8、 在返回100个字节空间的时候,由构造方法将内存初始化,返回首地址9、交给引用类型变量 10、 对象创建完毕ref参数的变量必须声明赋值后再传入方法是用,out参数的变量可以不赋值,但是必须在方法中赋值
装箱是:在托管堆中分配内存,内存的大小是值类型中各个字段的内存和 加上类型对象指针和同步索引块, 然后复制到托管堆内存,然后返回对象地址。这个地址就是对一个对象的引用。
拆箱操作的执行过程和装箱操作过程正好相反,是将存储在堆上的引用类型值转换为值类型并给值类型变量。
装箱操作和拆箱操作是要额外耗费cpu和内存资源的,所以在c# 2.0之后引入了泛型来减少装箱操作和拆箱操作消耗。