标签:memory inheritance clr c object
想象一下,我有两个类,class1和class2.
Class1继承自baseClass,如下所示:
baseClass
{
private Int64 one;
protected Int64 two;
public Int64 three;
}
和class1看起来像这样
Class1 : baseClass
{
private Int64 four;
protected Int64 five;
public Int64 six;
}
和class2看起来像这样:
Class2
{
private Int64 one;
protected Int64 two;
public Int64 three;
private Int64 four;
protected Int64 five;
public Int64 six;
}
如果我要创建每个类的10k数组,哪个更大? class1数组会更大,因为class1还将包含某种与baseClass有关的元数据吗?否则它们的属性是相同的,因此从技术上讲它们应该相同.
解决方法:
给定两个引用类型数组,即:
Class1[] a1 = new Class1[10000];
Class2[] a2 = new Class2[10000];
数组的大小将完全相同.数组的元素只是引用,引用的大小始终相同,无论引用对象是什么.引用在32位运行时中为4字节,在64位运行时中为8字节.
至于类实例,我希望它们的大小也相同.类实例本身仅保存该类的数据,还有少量其他数据,其中包括对该类的类型的引用.类实例本身并不“知道”它是派生类.该信息由类型保存.
因此,Class1的类型信息可能略大于Class2的类型信息,但是这两个类的实例将占用相同的内存量.
综上所述,使用继承自baseClass的Class1会比使用Class2花费更多的字节,因为您拥有两个类的类型信息.但这实际上只是增加了几个字节-无论类元数据的开销是多少.每个类实例不会花费您任何额外的费用.
标签:memory,inheritance,clr,c,object 来源: https://codeday.me/bug/20191101/1983607.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。