C#基础知识 - 内存管理

Mah*_*esh 2 c#

我是C#编程的新手.

有谁能告诉我关于C#的内存管理?

Class Student
{

     int Id;
     String Name;
     Double Marks;

     public string getStudentName()
     {
         return this.Name;
     } 

     public double getPersantage()
     {
         return this.Marks * 100 / 500;
     } 
}
Run Code Online (Sandbox Code Playgroud)

我想知道为这个类的例子分配了多少内存?

方法怎么样?在哪里分配?

如果有静态方法,他们的存储怎么样?

有人可以请我简单解释一下吗?

Jon*_*eet 5

类本身的实例将在32位CLR上占用24个字节:

  • 8字节的对象开销(同步块和类型指针)
  • int的4个字节
  • 字符串引用的4个字节
  • 双精度为8个字节

请注意,字符串本身的内存除此之外 - 例如,许多对象可以共享对同一字符串的引用.

方法不会导致相同类型的存储损失是字段.基本上它们与类型相关联而不是类型实例,但是需要考虑IL版本和JIT编译的代码.但是,通常你可以根据我的经验忽略这一点.与数据相比,您必须拥有大量代码并且代码占用的内存很少.重要的是,您没有为每个实例获取每个方法的单独副本.

编辑:请注意,您碰巧选择了一个相对简单的案例.在情况下,您已经有了逻辑上更小尺寸(如字段shortbyte字段)的CLR选择如何布置在内存中的对象,从而使得在需要内存对齐(是一个字的边界)值布局适当,但可能支持其他字段 - 所以4字节字段可能最终占用4个字节,或者如果CLR决定分别对齐每个字节,它们可能需要16个字节.我认为这是特定于实现的,但CLI规范可能会规定采取的确切方法.