if (该对象的方法等相关信息是保存在内在中)
{
if (每个对象都保存一份)
{
Console.Writeline(实例化一个 byte 占多少内存?);
}
else
{
Console.Writeline(那是如何保存?);
}
}
else
{
Console.Writeline(那保存在哪里?当调用一个对象的方法的时候 .NET FX 是如何执行的?);
}==========================================请举例证明!!!
{
if (每个对象都保存一份)
{
Console.Writeline(实例化一个 byte 占多少内存?);
}
else
{
Console.Writeline(那是如何保存?);
}
}
else
{
Console.Writeline(那保存在哪里?当调用一个对象的方法的时候 .NET FX 是如何执行的?);
}==========================================请举例证明!!!
方法只有一份的,不会每个实例一份
那如果保存在内在中的话,Byte 岂不是远远不止一个字节?因为 Byte 类任意一个方法中的任意一个字符至少占一个字节。为什么我如下代码只占 107M 内存?int size = 1024 * 1024 * 100;byte[] buffer = new byte[size];for (int i = 0; i < size; i++)
{
buffer[i] = 0;
}
请别灌水。我发的两个贴子,你都做了毫无意义的回答。
那 CLR 是如何处理的呢?
你还是看看这篇文章吧,讲的很详细了http://www.microsoft.com/china/MSDN/library/netFramework/netframework/JITCompiler.mspx?mfr=true
好的,真是非常感谢!这就是我想要的答案:)。贴子我晚点时间再结,再看看还有没有别的意见。
.net运行时会在内存中建立一个类型对象,此对象不是具体实例,是一个特殊的对象,它会保存方法表.但是字段是保存在类实例里面,因为每个实例的字段很可能是不一样的. 比如假设有一个类叫Class1,那么如果你new了2个Class1.
方法表是保存在一个Class1类型对象的特殊对象里面,这个对象只有几个,不论你new了多少个Class1, 而字段却是保存在具体实例里面,你new了两个Class1,那么字段信息会保存两次.
在这里混久了——就都了解了。我有时候也爱骂人打架的。