托管堆的内存分配

来源:互联网 发布:js中字符串转换成数组 编辑:程序博客网 时间:2024/05/17 06:08

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:堆的分配是向高地址扩展:低地址到高地址(和栈的分配相反)