1:托管堆
定义:应用程序在进程初始化之后,CLR在进程的可用地址空间里分配一段保留的地址空间;它是进程的可用地址空间中的一块内存区域,但并不对应任何物理内存,这块地址空间就是托管堆。
分类:根据存储信息不同划分,最重要的是:垃圾回收堆(GC heap)和加载堆(Loader Heap)
GC heap:存储的是对象实例,受GC管理。
Loader Heap:存储最重要的信息是元数据相关的信息,即type对象。不受GC管理,生命周期从创建到AppDomain卸载。其中每个type对象在Loader heap中表现为一个method table(方法表:记录存储的元数据信息)
2:TypeHandle:类型句柄,指向对象实例的方法表。每个对象在创建的时候都包含了该附加成员,它占内存的4个字节。
3:SyncBlockIndex:用于线程同步,它的值指示线程的同步状态。每个对象在创建的时候都包含了该附加成员,指向一块被称为 Synchronization Block的内存块,占4个字节的内存空间。
4:NextObjPtr:是托管堆维护的一个指针,用于指向下一个新建对象分配时在托管堆中的位置。
5:testobj test = new testobj(); // 反汇编后,new操作被编译为 newobj指令。
6:堆的分配是向高地址扩展:低地址到高地址(和栈的分配相反)