• C#类在什么时候分配内存


     

    C#类在什么时候分配内存

     

             一直以为内存分配是在调用构造函数的时候。现在发现我错了。

     

      昨天在看C++的赋值运算时,想做一下笔记。一个类赋值给另一个类时,先调用构造函数,在给成员变量一个个赋值,静态成员变量不用赋值,因为静态成员变量属于类,被类的所有实例共享,所以不用被赋值,方法属于类,不用被赋值,也赋不了值。

     

    突然想到调用静态的属性或方法时不需要调用构造函数,因为调用构造函数只是产生一个新的实例,静态的属性或方法属于类吗,调用它们根本不用产生实例,我突然想尖叫,不调用构造函数,怎么分配内存,不分配内存类的属性存哪里,连内存都没有怎么访问它。

     

    所以我猜测内存在调用构造函数之前就分配好了,构造函数只是做一些初始化工作。

     

    下面是我的测试:

     

     

          

            

     

    从图中我们可以看出,在调用构造函数之前,成员变量已经初始化了,a=1,说明他们已经有属于他们的内存了,不然a=1s=1中的1往哪存,你不要告诉我说不需要内存。调用构造函数再对非静态成员变量进行初始化。在调用静态方法PrintStatic的过程中的确没有调用构造函数,大家都知道不需要调用构造函数。静态方法中只能调用静态的方法和属性,而属性的定义,以及在定义的时候给一个初值,都是在调用构造函数之前,一切都说明属性在调用构造函数之前已经分配内存了,所以请不要说:内存在调用构造函数的时候分配。

     

    一个类占用的内存是多少?我是这样认为的:

     

    一个类所占的内存等于=属性总内存+方法总内存+应用该类的指针所占的内存+同步索引块的大小。

     

    属性肯定是占内存的,至于方法,应该也占吧,不知道方法的内存首地址,怎么访问它。除了方法所在的内存,其他三个都是必须占内存的,类中可以没有方法吗,所以将基本类型赋给object类型(装箱),会多分配很多内存。

     

    而这些所需的内存编译器是非常清楚的,所以在调用构造函数之前调用完全可以分配内存。

     

     作者:陈太汉

     

     

     

  • 相关阅读:
    20155313 2016-2017-2《Java程序设计》课程总结
    java第四次实验
    java第五次实验
    20155313 实验三《Java面向对象程序设计》实验报告
    20155313 2016-2017-2 《Java程序设计》第十周学习总结
    20155311《Java程序设计》实验五(网络编程与安全)实验报告
    学号20155311 2016-2017-2《Java程序设计》课程总结
    20155311高梓云补交的Mypc课下实践
    20155311 《Java程序设计》实验四 (Android程序设计)实验报告
    20155311 实验三 敏捷开发与XP实践 实验报告
  • 原文地址:https://www.cnblogs.com/hlxs/p/2127127.html
Copyright © 2020-2023  润新知