日期:2014-05-18  浏览次数:20391 次

高手进来看看.(关于内存的分配)
请问.

一个class

和这个 class 的实例

在内存中的表现是怎样的呢?就是堆栈中的表现

------解决方案--------------------
class的实例分配在堆里,class本身在第一次使用时需要静态构造,应该放在类型池的地方
------解决方案--------------------
举例说明:
Custom cus=new Custom();
首先声明一个Custom引用cus,在堆栈上给这个引用分配存储空间,但这仅是一个引用,而不是实际的Custom对象,cus引用占用4个字节的空间,包含了存储Custom对象的地址,然后分配堆上的内存,以存储Custom实例(一个真正的实例而不只是一个地址)然后把cus的值设置为分配给新Custom对象的内存地址。Custom实例没有放在堆栈中,而是放在内存的堆中。假定Custom对象占用32字节这32字节包含了Custom实例字段,和.net用于识别和管理其类实例的一些信息。为了在堆上找到一个存储新Custom对象的存储位置,.net运行库在堆中搜索,选取第一个未使用的,32字节的连续块,分配给cus实例。
------解决方案--------------------


``class本身不占内存```

```只是这个class在实例化时会占用内存```

``它实例的对象没有直接放在堆区```

```而是通过在栈区分配一个32位随机的地址值```

``通过这个值来指向堆区中的内存空间```

``



------解决方案--------------------
楼上,class本身不占内存,那么该类的方法地址表,反射信息放在哪
------解决方案--------------------
class 的元数据信息在Heap中
Class 的实例数据分配在Heap中
Class的引用地址在Stack中
------解决方案--------------------
GC的Generation数据是在堆中,元数据信息和实例数据都由GC管理所以在堆中
Class的引用地址在Stack中 也不完全对, 如果是全局变量在Heap中,如果是局部变量在Heap中
------解决方案--------------------
修正:
GC的Generation数据是在堆中,元数据信息和实例数据都由GC管理所以在堆中
Class的引用地址在Stack中 也不完全对, 如果是全局变量在Heap中,如果是局部变量在Stack中
------解决方案--------------------
GC的Generation数据是在堆中,元数据信息和实例数据都由GC管理所以在堆中
Class的引用地址在Stack中 也不完全对, 如果是全局变量在Heap中,如果是局部变量在Stack中
------解决方案--------------------
CLASS是引用类型....楼主这些东西要看MSDN了解最基础的知识啊...谁那么有空给你打一大篇啊.