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

发表于:2012-1-04 09:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈太汉    来源:51Testing软件测试网采编

#
DotNet
分享:

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

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

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

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

  下面是我的测试

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

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

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

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

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

精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号